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

时间:2014-01-30 16:13:30

标签: java annotations java-bytecode-asm annotation-processing

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

roundEnvironment.getElementsAnnotatedWith(MyAnnotation.class)

通过这种方法,您可以使用一个方法生成一个类,该方法返回找到的类的集合。

有几个问题要强调:

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

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

https://github.com/johncarl81/silver

Silver非常重要,它使用大量的库代码来完成任务,但它可能会让您了解可能的事情。