是否可以在注释处理环境中获取包中的所有 TypeElement?

Pre*_*rno 6 java metaprogramming javac annotation-processing

我的库中有几个包含注释和基类的包。我在这个问题的上下文中扩展了 javax.annotation.processing.AbstractProcessor 。

有没有办法获取包中声明的所有类型的 java.lang.TypeElement 的列表/数组/集合?甚至元素?

目前,我有一个解决方法,通过使用类型上的注释将类标记为组,该类型仅存在于表示库中的相关对象组。是否有更简单的方法按包(即位置)而不是显式声明将类型分组在一起?

Pre*_*rno 5

找到了答案 - 我使用ProcessingEnvironment实例变量(在我的AbstractProcessor子类中)来获取javax.lang.model.util.Elements实例来执行真正有用的元素/类型/包访问:

   List<TypeMirror> typeMirrorsInPackage = processingEnv.getElementUtils()
                .getPackageElement("com.example.sample.annotations")
                .getEnclosedElements()
                .stream()
                .map(Element::asType)
                .filter(mirror -> mirror.getKind() == TypeKind.DECLARED)
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

请小心,根据javadoc:如果这是通用元素,则返回原型类型。这是元素对与其自己的形式类型参数相对应的类型变量的调用。显然Types类有更有用的实用方法来处理泛型。