如何从注释处理器内部检查包是否存在(在编译时)?
我正在为Android构建一个注释处理器(为了将来的解释,让我们称之为)。TestProcessor
该计划是让处理器在两种模式下运行:
模式 1:生成代码A模式 2:生成代码A和B
仅当处理器为其生成代码的环境中存在附加(可选)包时,才应选择模式 2。
有没有办法在注释处理器的处理方法中找出可选包是否存在?
编辑1:
对“(可选)包”的小澄清。通过附加包,我的意思是一个java包,它可能但不必存在于项目中(即使用处理器)。例如,可选包可以表示外部库的内容。外部库可以但不必包含在项目中。
让我举个小例子:
- 假设我们有一个(单模块)项目 。
Sample -
Sample正在使用我的 .TestProcessor - 让我们以外部库为例
Square'sPicasso - 如果 HAS 作为其依赖项之一,则在
模式 2中运行并生成代码和 。换句话说:如果您可以使用(in)中的类而没有任何问题,那么处理器应该在模式2中运行。SampleSquare'sPicassoTestProcessorABcom.square.picassoSample - 如果依赖项中没有,则在
模式 1中运行并仅生成代码。Square'sPicassoSample'sTestProcessorA
编辑2:
我想到了这个问题的两个解决方法:
- 对两种
模式使用两种类型的批注(例如:、processor@DoStuffModeOne@DoStuffModeTwo) - 使用第二种类型的注释(例如,应在 上使用),这将触发
模式 2的使用(例如:Application@TriggerModeTwo)
对于我的情况,第二种解决方法更可取,但仍然比本身可以决定选择哪种模式要糟糕得多。TestProcessor