我正在为Android构建一个注解处理器(为了以后的解释,我们将其称为TestProcessor
)。
计划是让处理器在两种模式下运行:
模式1
:生成代码A
模式2
:生成代码A
和B
模式2
只有在处理器生成代码的环境中存在额外(可选)包时才应选择。
是否有办法在注解处理器的process
方法中找出可选包是否存在?
编辑1:
关于“(可选)包”的详细说明。通过附加软件包,我指的是可能但不必须在使用处理器的项目中存在的Java软件包。可选包可以代表外部库的内容。外部库可以包含在项目中,但不必如此。
让我举个小例子:
- 假设我们有一个(单模块)项目
Sample
。 Sample
正在使用我的TestProcessor
。- 以Square的Picasso作为外部库的例子
Sample
的依赖中包含Square's Picasso
,则TestProcessor
处于Mode 2
模式并生成代码A
和B
。换句话说:如果可以在Sample
中使用com.square.picasso
的类,则处理器应该处于Mode 2
模式。如果
Sample
的依赖中没有Square's Picasso
,则TestProcessor
处于Mode 1
模式并只生成代码A
。编辑2:
我想到了两个解决这个问题的方法:
1.为两个
processor modes
使用两种类型的注释(例如:@DoStuffModeOne
,@DoStuffModeTwo
)。2.使用第二种类型的注释(例如在
Application
上使用),触发使用Mode 2
(例如:@TriggerModeTwo
)。对于我的情况,第二种解决方法更可取,但仍然比处理器自己决定选择哪种
Mode
要糟糕得多。
B
)就没有任何意义,更可能会导致构建失败(因为缺少引用)。至于不同类型的注释,那是我正在考虑的解决方法之一。让我编辑我的问题,包括这个和我正在考虑的第二个解决方法。 - Bartek Lipinski