如何在编译时生成import?

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

我目前正在使用

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

附注我一直在寻找在 LombokMapStructSpoon 和其他不太知名的项目中添加导入的方法,但我没有找到类似的东西。

java code-generation jdk-internal-api
1个回答
0
投票

除了忽略 Package 声明的部分之外,此解决方案有效。 使用您的解决方案,生成的导入语句将位于包声明之上,并导致编译错误。 如果您安排生成的导入行,那么它就可以工作。 感谢您的解决方案。

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