Можно ли добавлять в классы дополнительные аннотации перед обработкой аннотаций?

Представьте себе следующее:

@MyAnnotation
public class A { ... };

@MyOtherAnnotation
public class B { ... };

Если класс аннотирован с помощью @MyAnnotation, перед обработкой аннотации следует добавить дополнительный @MyExtraAnnotation. Итак, после этого шага у нас должно быть:

@MyExtraAnnotation
@MyAnnotation
public class A { ... };

@MyOtherAnnotation
public class B { ... };

Это возможно? Если да, то как? Спасибо.


person Jérôme Verstrynge    schedule 10.10.2011    source источник
comment
Это зависит от того, когда вы хотите обрабатывать аннотации. Если вы обрабатываете их во время загрузки или во время выполнения, вы определенно можете добавить их во время компиляции - что такое Если все происходит во время компиляции, это тоже должно быть возможно, но вам, возможно, придется следить за порядком операций - I Однако я не уверен в этом.   -  person Thomas    schedule 11.10.2011
comment
Мне нужно добавить их во время компиляции, перед обработкой аннотации, что также происходит во время компиляции.   -  person Jérôme Verstrynge    schedule 11.10.2011
comment
какое отношение maven к вопросу?   -  person bestsss    schedule 11.10.2011
comment
Если у вас есть решение без Maven, мне тоже интересно.   -  person Jérôme Verstrynge    schedule 11.10.2011


Ответы (1)


Вам следует взглянуть на process-sources фазу жизненного цикла или, возможно, annotationProcessors конфигурация подключаемого модуля компилятора maven < / а>.

Я не нашел плагина, который «добавляет аннотации», но, безусловно, можно создать его для этого.

person ptomli    schedule 18.10.2011
comment
Что ж, я взглянул на процессоры аннотаций, но я действительно не понимаю, как я мог бы это сделать. Я мог бы регенерировать код класса в новый класс и добавить аннотацию, но это тяжело. Если бы я мог только изменить существующий код и добавить эту аннотацию, это было бы здорово. - person Jérôme Verstrynge; 18.10.2011
comment
Обработка источников, вероятно, будет проще, если вы чувствуете себя комфортно при обработке текста. Есть еще один вопрос SO, связанный с исходным кодом предварительной обработки [stackoverflow.com/questions/187550/. Если вы можете вызвать внешний процесс, скажем, perl, и выполнить замену, это будет легко (хотя и немного запутанно). s / @ MyAnnotation / @ MyExtraAnnotation \ n @ MyAnnotation / g - person ptomli; 18.10.2011