2017-03-12 33 views
1

我在库中有几个包含注释和基类的包。我在这个问题的上下文中扩展了javax.annotation.processing.AbstractProcessor。是否有可能在注解处理环境中获取包中的所有TypeElement?

有没有办法让一个包中声明的所有类型的List/Array/Set java.lang.TypeElement?甚至是元素?

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

回答

2

找到了答案 - 我用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()); 

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

相关问题