1

我正在制作一个注释处理器,参数中带有一个带有 KClass 的注释。我需要检查我在处理器中检索到的 KClasses 是否是数据类。

我无法使用

MyDataClass::class.isData

因为MirroredTypeException当您想要访问注释中的 Class 或 KClass 参数时会抛出

try {
    element.getAnnotation(MyAnnotation::class.java).myClass
} catch (mte: MirroredTypeException) {
    typeElement = typeUtils.asElement(mte.typeMirror) as TypeElement
}

现在我只能使用 TypeElement。

Kotlinpoet 提供KModifier了包含DATA属性,但它仅可用于类生成而不是读取。

我怎样才能有效地检查它?

4

1 回答 1

1

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

与某些评论所说的相反,实际上可以在注释处理期间找出有关元素的 Kotlin 特定信息,尽管有点复杂。@Metadata额外的 Kotlin 数据以-annotation的形式存储在协议缓冲区中。您可以使用此库来阅读@Metadata-annotations,然后按如下方式检查它们:

(element.kotlinMetadata as KotlinClassMetadata).data.classProto.isDataClass
于 2018-08-11T21:40:28.670 回答