Java注解处理:我如何知道一轮是否是最后一轮?

当扩展时,有可能覆盖,但没有“相反”的方法,这将在处理完所有回合后调用。AbstractProcessorinit(...)

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

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

有什么想法吗?


答案 1

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


答案 2

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

如前所述,

[...]在每一轮中,可能会要求处理在上一轮生成的源文件和类文件上找到的注释的子集。第一轮处理的输入是工具运行的初始输入;这些初始输入可以被视为虚拟第零轮处理的输出。[...]

由于在我的用例中,我要么不生成任何新的类文件,要么生成它们但不需要处理它们,因此只需“计数”轮次并仅在第一个轮次中执行实际工作就足够了(并在最后进行清理工作,例如关闭文件)。


推荐