Не удается прочитать MemberValue с помощью javassist - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу создать пользовательскую аннотацию и прочитать значения, используя Javasisst. Я пробовал это:

Аннотация:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.TYPE })
public @interface FixDescription {

    public String author() default "";

}

Тестовый класс:

@FixDescription(author="John Doe")
public class Hello {

    @FixDescription(author="John Doe")
    private int internal;

    @FixDescription(author="John Doe")
    public void say() {
        System.out.println("Hello");
    }
}

Попытка чтения:

// https://www.javassist.org/html/javassist/bytecode/AnnotationsAttribute.html

ClassFile classFile = ClassPool.getDefault().get("org.poc.Hello").getClassFile();
ConstPool constPool = classFile.getConstPool();

MethodInfo method = classFile.getMethod("say");
AnnotationsAttribute attr = (AnnotationsAttribute) method.getAttribute(AnnotationsAttribute.visibleTag);
Annotation an = attr.getAnnotation("FixDescription");

String s = ((StringMemberValue)an.getMemberValue("author")).getValue();
System.out.println("@FixDescription(author=" + s + ")");

Я получаю NPE на этой линии: an.getMemberValue("author") Знаете ли вы, как эта проблема может быть исправлена? Я не могу найти решение.

...