运行 DataBinding 生成后的 AnnotationProcessor
Run AnnotationProcessor after DataBinding Generation
我正在尝试制作一个采用整数的注释处理器。如果我使用显式整数,它工作正常。但是当我使用来自 android 数据绑定的值时 BR
class:
@SomeAnnotation(BR.someField)
它说找不到 BR
class。
我猜测 android 数据绑定 BR
生成尚未执行,因此出现错误。有什么方法可以标记我的注解处理器在数据绑定过程完成后开始处理吗?
问题还在于,您实际上想用这个值做什么。如果您在注释处理器中确实需要这个值,您可能就不走运了,因为 class 字段本身仅在编译过程中需要它的那一点之后创建。如果您需要运行时的值,您可能会遇到同样的问题。但是你应该考虑改变你的实现,因为在运行时处理注释是非常昂贵的。
现在进入可能有效的阶段。如果您需要将该值写入您使用注释处理器生成的源,您也可以将此字段用作字符串值并将其写入新创建的源。您只需要确保也设置了正确的导入。
@SomeAnnotation("BR.someField")
然后编译生成的代码时,此字段的行为与您将其放入您自己编写的源代码时的行为完全相同。只要确保它不会在另一个注释的定义中结束即可。
final int someField = BR.someField;
我正在尝试制作一个采用整数的注释处理器。如果我使用显式整数,它工作正常。但是当我使用来自 android 数据绑定的值时 BR
class:
@SomeAnnotation(BR.someField)
它说找不到 BR
class。
我猜测 android 数据绑定 BR
生成尚未执行,因此出现错误。有什么方法可以标记我的注解处理器在数据绑定过程完成后开始处理吗?
问题还在于,您实际上想用这个值做什么。如果您在注释处理器中确实需要这个值,您可能就不走运了,因为 class 字段本身仅在编译过程中需要它的那一点之后创建。如果您需要运行时的值,您可能会遇到同样的问题。但是你应该考虑改变你的实现,因为在运行时处理注释是非常昂贵的。
现在进入可能有效的阶段。如果您需要将该值写入您使用注释处理器生成的源,您也可以将此字段用作字符串值并将其写入新创建的源。您只需要确保也设置了正确的导入。
@SomeAnnotation("BR.someField")
然后编译生成的代码时,此字段的行为与您将其放入您自己编写的源代码时的行为完全相同。只要确保它不会在另一个注释的定义中结束即可。
final int someField = BR.someField;