【问题标题】:Generated class consumed by another Annotation Processor另一个注释处理器使用的生成类
【发布时间】:2017-10-11 14:50:53
【问题描述】:

我正在编写一个注释处理器来生成Android Databinding Observable 对象。这个想法是在Realm 和数据绑定库之间提供一个兼容性填充程序。

样本输出:

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 不可用)。

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

【问题讨论】:

    标签: java android data-binding annotations


    【解决方案1】:

    事实证明,我做错了几件事:

    1. 我试图处理的注释引用了 BR.class,这导致我的注释类的处理从被处理直到 BR.class 生成之后。这导致我的注释处理器在 android 数据绑定处理器之后运行。
    2. android 数据绑定处理器仅在第一轮收集 BR.class 的值。在后续轮次中生成的任何文件都将被忽略。这意味着即使在我的文件生成后数据绑定注释处理器正在运行,BR 类也没有被更新。
    3. android 数据绑定处理器在第一轮运行。这有效地排除了其他注释处理器生成的消费类。见 (2)

    我的解决方案是构建一个 gradle 插件,该插件将生成一个包含@Bindable 注释的接口。这些文件在编译器运行之前生成,确保它们在第一轮注释处理中存在。那时我的注释处理器可以生成上述文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多