Java注释处理:我怎么知道一轮是最后一轮?

时间:2010-11-10 12:01:51

标签: java annotations annotation-processing shutdown-hook

扩展AbstractProcessor时,有可能覆盖init(...),但没有“对立”方法,在处理所有轮次后调用。 / p>

这是一个问题:当您必须将每轮收集的信息附加到相同文件时,您无法关闭该文件,因为您永远无法知道最后轮是。因此,文件永远不会关闭并保持为空。

使用关闭钩子也不起作用,永远不会调用钩子。

有什么想法吗?

2 个答案:

答案 0 :(得分:19)

Processor.process方法包含RoundEnvironment类型的参数。也许RoundEnvironment.processingOver方法可能有所帮助。

答案 1 :(得分:4)

在注释处理的上下文中,我对“回合”的理解似乎是错误的:

如上所述here

  

[...]每轮,处理器可以   被要求处理一部分   在源和上找到的注释   类文件由前一轮制作。   第一轮投入   处理是a的初始输入   运行工具;这些初始投入   可以视为一个输出   虚拟第0轮处理。   [...]

因为在我的用例中我要么没有生成任何新的类文件,要么我生成它们但需要处理它们应该只是“计算”轮次,只在第一轮中进行实际工作(并进行清理工作,例如在文件结束时关闭文件)。