Как сгенерировать импорт во время компиляции? - PullRequest
1 голос
/ 09 ноября 2019

В настоящее время я делаю это с реализацией com.sun.source.util.Plugin, которая имеет этот метод для добавления следующего выражения в раздел импорта import java.util.List;:

private void generateImport(CompilationUnitTree compilationUnitTree) {
        var jcCompilationUnit = (JCTree.JCCompilationUnit) compilationUnitTree;
        List<JCTree> imports = jcCompilationUnit.defs.stream()
            .filter(def -> def.hasTag(JCTree.Tag.IMPORT))
            .collect(Collectors.toList());
        JCTree.JCImport classImport = treeMaker.Import(
            treeMaker.Select(
                treeMaker.Ident(names.fromString("java.util")),
                names.fromString("List")
            ),
            false
        );
        imports.add(classImport);
        jcCompilationUnit.defs = List.from(imports);
    }

names -Экземпляр com.sun.tools.javac.util.Names & treeMaker - Экземпляр com.sun.tools.javac.tree.TreeMaker

Я добавил свой плагин в качестве зависимости к проекту с одним единственным A.java, и после выполнения mvn package, A.class отсутствует, у меня просто пустая директория target.

Кажется, мое решение неверно. Итак, вопрос: как мне добавить import <something> к A.java во время компиляции?

PS Я искал способы добавить импорт в такие проекты, как Lombok , MapStruct и другие менее известные, но я не нашел ничего подобного.

...