我正在编写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
方法的第4个参数从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项目