OK, I found a workaround:
In the Processor, store the rootElements somewhere:
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("*")
public class AnnotationProcessor extends AbstractProcessor {
private Trees trees;
private List<TreeScanner<?, Trees>> scanners = new LinkedList<>();
public void addScanner(TreeScanner<?, Trees> scanner) {
scanners.add(scanner);
}
public void removeScanner(TreeScanner<?, Trees> scanner) {
scanners.remove(scanner);
}
@Override
public synchronized void init(final ProcessingEnvironment processingEnvironment) {
super.init(processingEnvironment);
trees = Trees.instance(processingEnvironment);
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
if (!roundEnv.processingOver()) {
ASTUtils.setRootElements(roundEnv.getRootElements());
for (final Element element : roundEnv.getRootElements()) {
CompilationUnitTree compilationUnit = trees.getPath(element).getCompilationUnit();
for (TreeScanner<?, Trees> scanner : scanners) {
scanner.scan(compilationUnit, trees);
}
}
}
return true;
}
}
In my case, I stored them in a helper class ASTUtils:
public class ASTUtils {
private static Set<? extends Element> rootElements = new HashSet<>();
public static Set<? extends Element> getRootElements() {
return rootElements;
}
public static void setRootElements(Set<? extends Element> rootElements) {
ASTUtils.rootElements = rootElements;
}
}
Then you can determine the TreePath:
public static TreePath find(Tree tree, Trees trees) {
for (Element e : ASTUtils.getRootElements()) {
CompilationUnitTree compilationUnit = trees.getPath(e).getCompilationUnit();
TreePath path = TreePath.getPath(compilationUnit, tree);
if (path != null) {
Tree classTree = trees.getTree(trees.getElement(path));
if (classTree != null && classTree.getKind() == kind) {
return path;
}
}
}
return null;
}
Now it is possible to use the TreePath of the superclass to get the corresponding CompilationUnitTree and read the package or get the TypeElement and read the qualified name (see answers/initial post before).