【问题标题】:Annotation processor handles only recently changed classes注释处理器仅处理最近更改的类
【发布时间】:2017-06-02 06:22:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这是一个 XY 问题 - 你想要 X 但你要求 Y。
  • @Antoniossss 如果你看我的最后一段,我实际上要求两者。

标签: java eclipse annotation-processing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2013-05-27
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多