Обработка аннотаций Java: как узнать, является ли раунд последним?

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

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

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

Любые идеи?


person java.is.for.desktop    schedule 10.11.2010    source источник


Ответы (2)



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

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

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

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

person java.is.for.desktop    schedule 11.11.2010
comment
Но другие процессоры аннотаций могут создавать файлы, которые затем обрабатываются вашими. Таким образом, вы не должны полагаться на это предположение. - person Erik Hofer; 31.08.2016