JDK 6 和 7 中的 Java 注释处理 API(不是 5 中的 apt 工具 API)定义了注释处理器的生命周期。一个是通过无参数构造函数实例化的,init
使用实例调用该方法ProcessingEnvironment
,然后通过该process
方法使用该处理器。如果适用,在所有后续处理轮次中只制作和使用一个处理器实例。
由于我的处理器类变得有点臃肿,我已经为它应该处理的单独注释创建了处理程序类。在这些类的方法中,我总是传入我从它们的实用方法中获得Elements
的实例。这使我的方法签名相当长。Types
ProcessingEnvironment
我宁愿只在处理程序以及处理器实例中保留对Elements
and实例的引用。Types
我通过将它们从ProcessingEnvironment
传递到init
方法中来做到这一点。现在,我想知道这是否安全。JavaDoc forProcessor
清楚地表明,某些方法仅对处理器调用一次,但init
此处未提及。我有点假设这是隐含的理解,但我不是 100% 确定。
我还想知道Messager
也可以从中获得的实例ProcessingEnvironment
在所有处理轮次中是否保持不变。我宁愿没有出现一轮的警告/错误,但其他人却被排除在外。我有理由确定在各轮中使用相同的实例应该是安全的,但只是想要一些确定性。