Java 8编译器插件:如何在生成的类中添加扩展表达式?

问题描述 投票:0回答:1

我正在编写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

感谢您的帮助。

java javac annotation-processing
1个回答
0
投票

扩展表达式:

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项目

© www.soinside.com 2019 - 2024. All rights reserved.