Обработка аннотаций Java: как узнать, является ли раунд последним? - PullRequest
12 голосов
/ 10 ноября 2010

При расширении AbstractProcessor есть возможность переопределить init(...), но нет "противоположного" метода, который был бы вызван после обработки всех раундов.

Это проблема: когда вам нужно добавлять информацию, собранную в каждом раунде, в один и тот же файл , вы просто не сможете закрыть файл, потому что никогда не узнаете, когда последний раз раунд был. Таким образом, файл никогда не закрывается и остается пустым.

Использование отключающего хука также не работает, хук никогда не вызывается.

Есть идеи?

Ответы [ 2 ]

19 голосов
/ 10 ноября 2010

Метод Processor.process включает аргумент типа RoundEnvironment. Возможно, метод RoundEnvironment.processingOver может помочь.

4 голосов
/ 11 ноября 2010

Кажется, что мое понимание «раундов» в контексте обработки аннотаций было неверным:

Как указано здесь ,

[...] В каждом раунде процессор может попросить обработать подмножество аннотации найдены на источнике и файлы классов , полученные в предыдущем раунде . Входы в первый раунд обработка являются начальными входами в запуск инструмента; эти начальные входы может рассматриваться как выход виртуальный нулевой раунд обработки. [...]

Поскольку в моем случае использования я либо не создаю каких-либо новых файлов классов, либо я создаю их, но не нужно обрабатывать их, это следует стараться просто «считать» раунды и выполнять реальную работу только в первом (и выполнять очистку, такую ​​как закрытие файлов, в конце).

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