从 ActiveAnnotation 获取 Annotation 参数

Get Annotation parameter from ActiveAnnotation

我正在尝试实现参数化的 ActiveAnnotation 并尝试获取提供的注释。

@Active(ExampleProcessor)
annotation ExampleAnnotation {
    val String value
}

class ExampleProcessor extends AbstractClassProcessor {
    override doRegisterGlobals(ClassDeclaration annotatedClass, extension RegisterGlobalsContext context)
    {
        val annotation = ??
        annotation.value
    }
}

我做了什么

annotatedClass.annotations.filter(ExampleAnnotation).head.value

不幸的是,这样使用时会导致空指针:

@ExampleAnnotation("Hello!")
class MyClass { }

annotatedClass.annotationsAnnotationReference 类型的元素组成,而不是 Class<?>,你应该为你的 class 查找一个类型,然后用它来过滤注释,例如:

val annotation = annotatedClass.findAnnotation(ExampleAnnotation.findUpstreamType)
val value = annotation.getStringValue('value');