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