由另一个注释处理器消耗的生成的类

时间:2017-10-11 14:50:53

标签: java android data-binding annotations

我正在编写一个生成Android Databinding的注释处理器  Observable个对象。我们的想法是在Realm和数据绑定库之间提供兼容性垫片。

示例输出:

    span.link_wer:after{
        content:'zu uns';
        vertical-align:1.8em;
    }

    span.link_wer:hover>span.link_wer:after{
        vertical-align:4.8em;

}

问题是数据绑定注释处理器不处理由我的注释处理器生成的类(导致public class ObservablePerson extends BaseObservable { @Bindable public String getName() { return getValue(BR.name); } @Bindable public void setName(String name) { setValue(BR.name, name); } } 不可用)。

我原本希望数据绑定注释处理器能够在后一轮中获取新生成的类,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

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

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