注释处理器句柄最近才更改 类

Annotation processor handles only recently changed classes

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

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

This option only applies to processors using the Java 5 Mirror APIs. It does not affect processors using the Java 6 annotation processing APIs.

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

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

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

我假设您的处理器会在运行时收集所有 ID。最好将收集到的 id 存储到缓存(例如文件)中,并在每次编译时检查那里是否有扫描所有带注释的 classes(准确地说是所有 classes)。这样,注册 id 只需要编译 class。未来的每一次修改都将检查已经编译的、未修改的 classes 而我们重新检查它们。