检查TypeElement是否是注释处理器中的Kotlin Data Class

时间:2018-06-14 07:37:37

标签: kotlin annotations

我正在制作一个注释处理器,其参数中带有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,但它仅适用于类生成而不能阅读。

我该如何有效地检查它?

1 个答案:

答案 0 :(得分:1)

不确定它是否仍然与您相关,但我还是会回答:

与某些评论所说的相反,尽管有些复杂,但实际上有可能在注释处理过程中找到有关元素的Kotlin特定信息。额外的Kotlin数据以@Metadata注释存储在协议缓冲区中。您可以使用this library来阅读@Metadata注释,然后按如下所示进行检查:

(element.kotlinMetadata as KotlinClassMetadata).data.classProto.isDataClass