kotlin编译器插件:如何检查属性是否有注解?

zbwhf8kr  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(322)

我正在创建一个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 ,我可以用非常相似的代码得到这个函数的注解。
问题:如何获取数据类中属性的注解?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题