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