Ответ 1
Processor.process
содержит аргумент типа RoundEnvironment
. Возможно, поможет RoundEnvironment.processingOver
.
При расширении AbstractProcessor
существует возможность переопределить init(...)
, но нет никакого "противоположного" метода, который вызывается после того, как были обработаны раунды all.
Это проблема: когда вам нужно добавить информацию, собранную во время каждого раунда, в тот же файл, вы просто не сможете закрыть файл, потому что вы никогда не узнаете, когда последний раунд был. Таким образом, файл никогда не закрывается и остается пустым.
Использование крюка отключения также не работает, крючок никогда не вызывается.
Любые идеи?
Processor.process
содержит аргумент типа RoundEnvironment
. Возможно, поможет RoundEnvironment.processingOver
.
Похоже, что мое понимание "раундов" в контексте обработки аннотаций было неправильным:
Как указано здесь,
[...] В каждом раунде процессор может попросить обработать подмножество аннотации, найденные на источнике и класс , созданный предыдущим раундом. Входы в первый раунд обработки являются исходными запуск инструмента; эти начальные входы можно рассматривать как выход виртуальный нулевой раунд обработки. [...]
Так как в моем случае использования я либо не производя никаких новых файлов классов, либо я их создаю, но не должен обрабатывать их, должно быть достаточно просто "подсчитать" раунды и выполнять фактическую работу только в первом (и выполнять очистку работы, например, закрытие файлов, в конце ее).