Я создаю Аннотационный процессор для Android (ради будущих объяснений, позвоните ему TestProcessor
).
План предназначен для работы процессора в двух режимах:
-
Mode 1
: генерация кодаA
-
Mode 2
: генерация кодаA
иB
Mode 2
следует выбирать, только если дополнительный (дополнительный) пакет существует в среде, для которой процессор генерирует код.
Есть ли способ узнать в методе обработки аннотаций process
, если существует дополнительный пакет?
РЕДАКТИРОВАТЬ 1:
Небольшое уточнение в пакете "(необязательно)". Под дополнительным пакетом я подразумеваю пакет java, который может, но не должен существовать в проекте (который использует процессор). Дополнительный пакет может представлять собой, например, содержимое внешней библиотеки. Внешняя библиотека может, но не должна быть включена в проект.
Позвольте мне сделать небольшой пример:
- Предположим, что мы имеем (одномодульный) проект
Sample
. -
Sample
использует мойTestProcessor
. - Возьмем
Square's
Picasso
в качестве примера внешней библиотеки - Если
Sample
HASSquare's
Picasso
как одна из его зависимостей,TestProcessor
работает вMode 2
и генерирует кодA
иB
. Другими словами: если вы без проблем можете использовать классы изcom.square.picasso
(inSample
), то процессор должен работать вMode 2
. - Если в
Sample's
зависимостей нетSquare's
Picasso
,TestProcessor
работает вMode 1
и генерирует только кодA
.
ИЗМЕНИТЬ 2:
Я думал о двух обходных решениях для этой проблемы:
- Использование двух типов аннотаций для двух
processor
Modes
(пример:@DoStuffModeOne
,@DoStuffModeTwo
) - Используя второй тип аннотации (который должен использоваться, например, для
Application
), который запускает использованиеMode 2
(пример:@TriggerModeTwo
)
В моем случае второе решение намного предпочтительнее, но все же намного хуже, чем было бы, если бы сам TestProcessor
мог решить, какой Mode
выбрать.