Как заменить код в существующем классе по средствам процессора аннотаций?

Есть 2 аннотации:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Ann {
    public String description() default "AAA";
    public String template() default "BBB";
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface AnotherAnn {
    public String text() default "Text";
}

Есть простой класс в котором метод обозначен одной из вышеуказанных аннотаций:
public class App {
    @Ann(description = "Yo!", template = "Bitches.")
    public void someMethod(){}
}


Необходимо при помощи процессора аннотаций заменить в методе someMethod класса App аннотацию @Ann на аннотацию @AnotherAnn (или дописать вторую). И как результат - отобразить содержимое параметра text из аннотации @AnotherAnn:
@SupportedAnnotationTypes("alexiuscrow.annotation.Ann")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class Proc extends AbstractProcessor {

    public Proc() {
        super();
    }

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        /* TODO DIRTY WORK (ANNOTATION REPLACEMENT)*/

       Class<App> appClass = App.class;

        for (Method method: appClass.getDeclaredMethods()) {
            if (method.isAnnotationPresent(AnotherAnn.class)) {
                AnotherAnn anotherAnn = method.getAnnotation(AnotherAnn.class);

                System.out.println("Method: \t" + method.getName());
                System.out.println("AnotherAnn: \t" + anotherAnn);
                System.out.println("Text: \t" + anotherAnn.text());
            }
        }
        return true;
    }
}
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы