Невозможно использовать AbstractProcessor в IDE - PullRequest
0 голосов
/ 04 февраля 2020

Мотивация:

В нашем коде есть несколько мест, где некоторые методы запускаются по их именам. Есть несколько больших if-else-if блоков с каждым именем функции и вызовом соответствующего метода (я использую термин функция для описания только имен, например, функция X01 может соответствовать методу SomeClass.functionX01). Я искал способы улучшить это

Цель:

Писать только методы, которые помечены какой-то пользовательской аннотацией, избавляя от необходимости обновлять или даже включать if-else-if блоков для запуска указанной c функции. Иметь доступ к любому сгенерированному коду, если сгенерирован какой-либо код.

Что я сделал:

Я создал первое подтверждение концепции с использованием аннотаций времени выполнения, и оно оказалось успешным, но медленнее, чем if-else-if. Следующая попытка была с исходной аннотацией

Для примера я следовал по этой ссылке, однако она не работала в IntelliJ. Я хотел получить класс PersonBuilder, а не его. В некоторых случаях возникала ошибка Error:java: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider BuilderProcessor not found

После некоторого поиска в Google и невозможности найти что-либо, что я включил в книгу (Core Java, том II - Расширенные функции - 9-е издание, перевод Poli sh ) и было рекомендовано выполнить следующие команды:

javac [AbstractProcessor implementation]
javac -processor [Compiled Processor] [other source files to compile]

Это сработало, однако неудовлетворительно, поскольку это должно происходить внутри IDE (NetBeans и IntelliJ, которые должны быть указаны c) автоматически во время сборки. Код не должен быть сгенерирован на лету, но программист должен иметь доступ к нему после сборки (как, например, возможность вызывать методы сгенерированных классов)

Вопрос:

Как получить и использовать сгенерированный код, используемый в NetBeans и IntelliJ, без необходимости использования внешних инструментов? Возможно ли это, или использование отражения, аннотаций времени выполнения или внешних инструментов - единственный способ?

Дополнительная информация (на всякий случай):

Уровень языка: Java Версии 1.8

JVM: 12 и 13

IDE: NetBeans и IntelliJ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...