1

I am currently doing this with the implementation of com.sun.source.util.Plugin, which has this method for adding the following expression to the import section 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 - Instance of com.sun.tools.javac.util.Names & treeMaker - Instance of com.sun.tools.javac.tree.TreeMaker

I added my plugin as a dependency to a project with one single A.java, and after the mvn package is done, A.class is missing, I just have an empty target directory.

It seems like my solution is wrong. So the question is: how do I add import <something> to A.java at compile time?

P.S. I was looking for ways to add imports in projects such as Lombok, MapStruct, Spoon and other less well-known, but I did not find anything like it.

slick
  • 13
  • 5

0 Answers0