Получение инициализатора в аннотированном поле - PullRequest
1 голос
/ 14 января 2011

Допустим, у меня есть этот класс:

@Annotate class MyClass { MyField field = new MyField(params); }

Как я могу получить инициализирующую часть поля моего класса при обработке аннотации (часть new MyField(params))?

Я не вижу ничего связанного с FieldDeclaration классом.

1 Ответ

1 голос
/ 14 января 2011

Вы не можете.

Используете ли вы отражение или apt , вы не можете получить доступ к кодовым блокам.

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

Если вы достаточно отчаянны по этому поводу, вам нужно использовать синтаксический анализатор исходного кода, например javaparser , или инструмент байт-кода, например asm . Оба понимают древовидные структуры (первый использует исходные деревья, второй - деревья байт-кода) и может работать со всеми структурами java, включая блоки инициализатора.

Но ваша лучшая ставка, вероятно, AspectJ и это initialization(ConstructorSignature) pointcut. Есть некоторая ссылка на страницу с указателями , но чтобы действительно ее понять, вам, вероятно, придется прочитать AspectJ в действии Рамниваса Ладдада .

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