【发布时间】:2017-02-13 17:41:48
【问题描述】:
我正在为一个 Android 项目编写注释处理器并且遇到了一种情况。我想处理库模块中的注释类,即应用程序模块依赖于库模块,需要处理库模块中的注释类。
但是,注释处理器无法“看到”依赖项中的注释,可能是因为代码已经编译。有关另一个库的问题,请参阅 here。我的项目问题的演示在分支here 上。来自sample 模块的注解被处理,但来自lib 模块的注解未被处理。
这一切都很好,我已经放弃了没有这个功能的生活,但事实证明,Android 数据绑定库可以处理来自模块甚至第三方库的注释。例如,This 库提供了由应用程序处理的@BindingAdapter 方法。
我尝试在我使用的注释上设置保留类型,但无济于事。我能看到的唯一显着区别是数据绑定处理器以方法为目标,而我的方法以类(类型)为目标,但我认为这不会对处理器产生影响。所以我认为这可能与作为 Android 插件一部分的数据绑定处理器有关,但我不确定这在这里有什么帮助。
有人知道这是怎么做到的吗?
【问题讨论】:
-
我对你的问题有点困惑。您是否可以提供一个示例,但不能满足您的要求?据我所知,编译与否无关紧要,只要保留策略是运行时。
-
我的理解是,运行时处理器注释无关紧要,但编译时处理器注释确实如此,这是出于性能原因在 Android 上更常用的模式。我现在没有设置示例项目,但包括我在您拥有的任何项目中引用的 ClassIndex 项目应该演示引用问题中提到的问题。
-
"注释处理器无法“看到”依赖项中的注释,可能是因为代码已经编译" - 您给我们的链接中的回复说“自定义处理器'看到'只编译的类。”好像你没有阅读回复。它可能包含可以解决您的问题的信息。
-
不,你混淆了这两种用法。他的意思是注释处理器在编译过程中运行,因此它“看到”传递给java编译器的类。来自任何第三方依赖项的类都经过预编译,因此编译器不会“看到”正在编译的项目,它们按原样打包。
-
这实际上与编译/非编译限制无关。这就是该特定库的工作方式。我认为你已经用不相关的信息污染了这个问题。也许我把事情简化得太多了,但问题似乎只是如何扫描外部库中的注释。
标签: java android android-databinding annotation-processing android-binding-adapter