如何在编译时生成导入?

时间:2019-11-09 12:38:14

标签: java code-generation jdk-internal-api

我目前正在使用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);
    }

名称-com.sun.tools.javac.util.Names treeMaker的实例-com.sun.tools.javac.tree.TreeMaker的实例

我将插件作为一个依赖项添加到一个A.java的项目中,完成mvn package之后,A.class丢失了,我只有一个空的{{1} }目录。

看来我的解决方案是错误的。 所以问题是:如何在编译时将target添加到import <something>

P.S。我一直在寻找在诸如 Lombok MapStruct Spoon 等项目中添加导入的方法,但是我没有找到任何类似的东西。

0 个答案:

没有答案