Обработка аннотаций Java и манипулирование байт-кодом - PullRequest
0 голосов
/ 14 декабря 2018

Насколько я понимаю, процессор аннотаций - это «плагин» в компиляторе Java, что означает, что обработка аннотаций выполняется во время компиляции.

Поскольку манипулирование байт-кодом также можно выполнять во время компиляции, можно ли во время компиляции манипулировать байт-кодом из классов, сгенерированных процессором аннотаций?

Происходит ли обработка аннотаций докомпилятор на самом деле что-нибудь компилирует, чтобы сгенерированные классы потом компилировались на основной стадии компиляции?

Или, в более широком смысле, кто-нибудь объяснит или укажет мне на документацию по Java о порядке выполнения компилятора javac и процессора аннотаций?

Спасибо

1 Ответ

0 голосов
/ 17 марта 2019

Обработка аннотации происходит после «Анализировать и вводить» и перед этапами «Анализировать и генерировать».Смотрите обзор компилятора для визуального представления конвейера компиляции.Это означает, что файлы классов еще не существуют в тот момент, когда работают процессоры аннотаций.

Не процессор аннотаций не может изменять AST модулей компиляции, которые он обрабатывает.Хотя он может создавать новые типы (либо в виде исходного кода, либо в виде байт-кода, хотя я не знаю ни одного фактического примера последнего), а также может создавать супертипы обработанных типов.

...