注释处理器仅处理最近更改的类

时间:2017-06-02 06:22:07

标签: java eclipse annotation-processing

在我们的项目中,我们希望为用户界面对话框创建唯一标识符。为了确保开发人员不为对话框创建重复的标识符,我创建了一个注释处理器,用于检查" Dialog注释" (它包含唯一标识符),如果检测到重复的标识符,则通过Eclipse Problems视图中的Messager类创建错误。

我希望处理器能够处理所有使用对话框注释注释的类,但是只有在Eclipse中调用完整的构建时才会这样做。但是,如果我更改单个对话框类并保存它,处理器只处理这个单一对话框(我相信这称为增量构建),因此我无法检查其他对话框是否已经分配了相同的标识符。 我尝试在Run this container's processors in batch mode文件中设置.factorypath,但似乎没有效果。 Factory Path Preferences的eclipse文档说明了这个选项:

  

此选项仅适用于使用Java 5 Mirror API的处理器。它不会影响使用Java 6注释处理API的处理器。

我确实使用Java 6注释处理API。所以这似乎也不是一种选择。

有没有办法让它处理所有带注释的类 - 甚至是未更改的类?我也很高兴听到其他方法来解决最初的问题。

1 个答案:

答案 0 :(得分:1)

AnnotationProcessor只处理已编译的类,所以难怪你有麻烦。

我假设您的处理器在运行时收集所有ID。将收集的id存储到缓存(例如文件)中并检查是否存在在每次编译时扫描所有带注释的类(所有类都是精确的)的情况会更好。这样,只需要单个编译类来注册id。每个未来的修改都将检查已编译的,未修改的类,并重新检查它们。