我正在制作一个注释处理器,其参数中带有KClass的注释。我需要检查我在处理器中检索的KClasses是否是数据类。
我无法使用
MyDataClass::class.isData
因为当您想要访问注释中的Class或KClass参数时引发的MirroredTypeException
,
try {
element.getAnnotation(MyAnnotation::class.java).myClass
} catch (mte: MirroredTypeException) {
typeElement = typeUtils.asElement(mte.typeMirror) as TypeElement
}
现在我只能使用TypeElement。
Kotlinpoet提供包含KModifier
属性的DATA
,但它仅适用于类生成而不能阅读。
我该如何有效地检查它?
答案 0 :(得分:1)
不确定它是否仍然与您相关,但我还是会回答:
与某些评论所说的相反,尽管有些复杂,但实际上有可能在注释处理过程中找到有关元素的Kotlin特定信息。额外的Kotlin数据以@Metadata
注释存储在协议缓冲区中。您可以使用this library来阅读@Metadata
注释,然后按如下所示进行检查:
(element.kotlinMetadata as KotlinClassMetadata).data.classProto.isDataClass