Java 由另一个批注处理器使用的生成类

Java 由另一个批注处理器使用的生成类,java,android,data-binding,annotations,Java,Android,Data Binding,Annotations,我正在编写一个注释处理器来生成 物体。其想法是在和数据绑定库之间提供一个兼容性垫片 样本输出: public class ObservablePerson extends BaseObservable { @Bindable public String getName() { return getValue(BR.name); } @Bindable public void setName(String name) { s

我正在编写一个注释处理器来生成 物体。其想法是在和数据绑定库之间提供一个兼容性垫片

样本输出:

public class ObservablePerson extends BaseObservable {
    @Bindable
    public String getName() {
        return getValue(BR.name);
    }

    @Bindable
    public void setName(String name) {
        setValue(BR.name, name);
    }
}
问题是数据绑定批注处理器没有处理批注处理器生成的类(导致
BR.name
不可用)


我曾希望数据绑定注释处理器在以后的一轮中会拾取新生成的类,但事实并非如此。

事实证明,我做了一些错误的事情:

  • 我试图处理的注释引用了BR.class,这导致在生成BR.class之前,对注释类的处理一直处于处理状态。这导致我的注释处理器在android数据绑定处理器之后运行
  • android数据绑定处理器仅在第一轮中收集BR.class的值。将忽略后续回合中生成的任何文件。这意味着,即使数据绑定注释处理器在生成我的文件后运行,BR类也不会被更新
  • android数据绑定处理器在第一轮中运行。这有效地避免了使用由其他注释处理器生成的类。见(2)
  • 我的解决方案是构建一个gradle插件,该插件将生成一个包含
    @Bindable
    注释的接口。这些文件是在编译器运行之前生成的,保证它们在第一轮注释处理中出现。此时,我的注释处理器可以生成如上所述的文件