Пользовательский процессор аннотаций, использующий сгенерированные аннотацииJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Пользовательский процессор аннотаций, использующий сгенерированные аннотации

Сообщение Anonymous »

Вопрос
Как правильно создать обработчик аннотаций Java, который использует аннотации, которые он сам генерирует?
/>Контекст
Я рассматриваю обработку аннотаций как средство создания повторяющегося/шаблонного кода, и в настоящее время я рассматриваю аннотации, использующие перечисление. Насколько я понимаю, можно использовать только перечисления, на которые явно ссылаются, однако я хотел бы иметь возможность использовать любой клиентский Enum (таким образом, это не то, что известно обработчику аннотаций во время его компиляции).

Код: Выделить всё

public @interface GenericEnumAnnotation() {
Enum value();
}
не работает, скорее это нужно сделать как

Код: Выделить всё

public @interface MyEnumAnnotation() {
MyEnum value();
}
Итак, генерация кода вам на помощь! Вместо того, чтобы заставлять клиента создавать собственную аннотацию для каждого Enum, я настроил его на создание этой аннотации на основе аннотации @GenerateAnnotation. Таким образом

Код: Выделить всё

@GenerateAnnotation
public enum MyEnum {...}
сгенерирует действительную MyEnumAnnotation

Код: Выделить всё

@EnumAnnotation
public @interface MyEnumAnnotation() {
MyEnum value();
}
Клиентский код затем может использовать сгенерированную @MyEnumAnnotation. Теперь, когда перечисление сгенерировано, я хочу использовать это @MyEnumAnnotation для создания дополнительного кода для клиентского кода, который помечен им. Вновь сгенерированная аннотация становится доступной на втором проходе обработчика аннотаций, и благодаря @EnumAnnotation я могу сказать, что это именно та аннотация, которую я хочу использовать для генерации кода, однако когда я делаю попытку, никаких использований не происходит. найдены.

Код: Выделить всё

@SupportedAnnotationTypes("com.company.generator.EnumAnnotation")
@AutoService(Processor.class)
public class EnumAnnotationProcessor extends AbstractProcessor {

@Override
public boolean process(Set

Подробнее здесь: [url]https://stackoverflow.com/questions/78648395/custom-annotation-processor-using-generated-annotation[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»