我正在创建一个kotlin编译器插件,其中需要检查数据类的属性是否有注解:
data class User(
@MyAnnotation
val name: String
)
我重写 DelegatingClassBuilder.newField
按以下方式:
internal class MyClassBuilder(
delegateBuilder: ClassBuilder
) : DelegatingClassBuilder(delegateBuilder) {
override fun newField(
origin: JvmDeclarationOrigin,
access: Int,
name: String,
desc: String,
signature: String?,
value: Any?
): FieldVisitor {
val visitor = super.newField(origin, access, name, desc, signature, value)
val descriptor = origin.descriptor as? PropertyDescriptor ?: return visitor
if (descriptor.annotations.hasAnnotation(FqName("com.example.MyAnnotation"))) {
// I never get here
}
return visitor
}
}
问题:不管我的属性是否有注解 descriptor.annotations
不会包含我的注解。如果我将注解usetarget更改为其他任何内容,我仍然无法获得注解。
同时,如果我注解一个函数并重写 newMethod
,我可以用非常相似的代码得到这个函数的注解。
问题:如何获取数据类中属性的注解?
暂无答案!
目前还没有任何答案,快来回答吧!