API обработки аннотаций Java в том виде, как он есть в JDK 6 и 7 (не API apt tool из 5), определяет жизненный цикл процессора аннотаций.Один экземпляр создается с помощью конструктора no-args, метод init
вызывается с экземпляром ProcessingEnvironment
, а затем этот процессор используется с помощью метода process
.Только один экземпляр процессора создается и используется во всех последующих циклах обработки, если это применимо.
Поскольку мой класс процессора становился немного раздутым, я создал классы-обработчики для отдельных аннотаций, с которыми он должен иметь дело.В методах этих классов я всегда передаю Elements
и Types
экземпляры, которые я получил от ProcessingEnvironment
для их служебных методов.Это делает мои сигнатуры методов довольно длинными.
Я бы предпочел просто сохранить ссылку на экземпляры Elements
и Types
в обработчиках, а также в экземпляре процессора.Я сделал это, передав их из ProcessingEnvironment
, переданного в метод init
.Теперь мне интересно, если это безопасно.JavaDoc для Processor
дает понять, что некоторые методы вызываются только один раз для процессора, но init
здесь не упоминается.Я предполагал, что это неявно понято, но я не уверен на 100%.
Я также хотел бы знать, если экземпляр Messager
, который также может быть получен из ProcessingEnvironment
,остается неизменным на всех этапах обработки.Я бы предпочел, чтобы предупреждения / ошибки не появлялись в одном раунде, а другие не учитывались.Я достаточно уверен, что было бы безопасно использовать одни и те же экземпляры между раундами, но просто хотел бы иметь определенную уверенность.