使用注释处理器创建具有特定注释的类列表

emm*_*mby 7 java annotations annotation-processing java-bytecode-asm

我有一个我已实现的自定义注释,我想使用注释处理器生成我的应用程序中使用该特定注释的所有类的列表.

我发现本教程描述了如何使用注释处理器生成类文件,因此使用我的注释为每个类生成一个类应该很容易.

我无法弄清楚的是我如何将所有这些信息收集到一个类中.似乎没有办法修改类,所以一旦第一次生成类,我就无法将新项添加到列表中.

有没有办法使用注释处理器生成一个方法,该方法将返回应用程序中使用特定注释注释的所有类的列表?

Joh*_*sen 6

生成的类不必与正在处理的输入类一一对应。此外,您可以通过以下方式搜索使用给定注释进行注释的类(元素)RoundEnvironment

roundEnvironment.getElementsAnnotatedWith(MyAnnotation.class)
Run Code Online (Sandbox Code Playgroud)

由此,您可以使用返回找到的类的集合的方法生成单个类。

围绕此要强调的几个问题:

  • 注释处理器可以与其他注释处理器一起运行,因此必须处理在编译时生成的类。为帮助实现这一点,Java 注释处理会分轮进行,以允许处理器捕获其他人的输出。要与其他处理器兼容,您需要优雅地处理ErrorType.
  • 方法只返回当前编译阶段中的类,RoundEnvironmnet因此不会包含外部库中的类。
  • IDE(咳咳 Eclipse)以不同的方式实现 Java 的注释处理设施,这对于需要像我描述的那样需要完全非部分编译的处理器来说可能是一个问题。

巧合的是,我最近创建了一个类似的项目,它可以满足您的需求:

https://github.com/johncarl81/silver

Silver 在很大程度上是一个 WIP,并使用了大量库代码来完成任务,但它可能会让您了解什么是可能的。