从ActiveAnnotation

时间:2017-03-30 20:30:00

标签: xtend

我尝试实现参数化的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 { }

1 个答案:

答案 0 :(得分:0)

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

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