Java 8 Плагин компилятора: Как добавить расширяющее выражение в сгенерированный класс? - PullRequest
0 голосов
/ 18 апреля 2020

Я пишу плагин компилятора Java для добавления простого класса с именем MyClass в некоторые классы моего проекта (что-то вроде lombok). Мне удалось сделать это, написав приведенный ниже код (вы можете найти общий код здесь ):

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>{
}

Я не знаю, как это сделать!
Все, что я знаю, это изменить 4-й параметр ClassDef метод от null до JCExpression.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 20 апреля 2020

Выражение extends:

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 project

...