Java 8编译器插件: How to add extending expression to a generated class?

标签 java javac annotation-processing

我正在编写一个Java编译器插件,以在我的项目的某些类中添加一个名为MyClass的简单类(类似于lombok)。我已经成功地通过编写下面的代码来做到这一点(您可以发现整体代码是 here ):

TreeMaker maker = TreeMaker.instance(context);
Names symbolsTable = Names.instance(context);

JCTree.JCClassDecl myClass = maker
        .at(((JCTree) node).pos)
        .ClassDef(maker.Modifiers(Flags.PUBLIC | Flags.STATIC | Flags.FINAL),
                symbolsTable.fromString("MyClass"),
                List.nil(),
                null, // replace Here by ?
                List.nil(),
                List.nil()
        );

((JCTree.JCClassDecl) node).defs = ((JCTree.JCClassDecl) node).defs.append(myClass);

之前的代码将生成:

public static class MyClass {
}

现在,我想要 MyClass 扩展另一个参数化类:

public static class MyClass extends AnotherClass<Param1, Param2>{
}

我不知道该怎么做!
我所知道的就是将 ClassDef 方法的第四个参数从 null 更改为 JCExpression

感谢任何帮助。

最佳答案

扩展表达式:

JCTree.JCIdent extendClassName = maker.Ident(symbolsTable.fromString("AnotherClass"));

ListBuffer<JCTree.JCExpression> extendsParams = new ListBuffer<>();
extendsParams.add(maker.Ident(symbolsTable.fromString("Param1")));
extendsParams.add(maker.Ident(symbolsTable.fromString("Param2")));

JCTree.JCTypeApply extend = maker.TypeApply(extendClassName, extendsParams.toList());

我找到的最好的文档是 lombok项目

关于Java 8编译器插件: How to add extending expression to a generated class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61291064/

相关文章:

java - tomcat 未调用自定义注释处理器

java - 操作 javac -d : invalid flag? 时出错 如果我更正它,则会出现另一个 package-not-found 错误

JUnit 类上的 Javac 还编译源类

java - 检查 Java 是否安装在 makefile 中

java - Java 中的重定向 URL 类型 301

java - 如何在 Java Annotation Processing 中获取字段的类型注释?

kotlin - 在注解处理阶段获取kotlin fun参数的默认值

java - 如何在 60 秒后在 bukkit 中发送消息?

java - 来自 Baseadapter 的 Android Java 进度对话框

java - Setter 和 Getter 返回 0 值