检查TypeElement是否为批注处理器中的Kotlin数据类

检查TypeElement是否为批注处理器中的Kotlin数据类,kotlin,annotations,Kotlin,Annotations,我正在生成一个注释处理器,在参数中包含一个带有KClass的注释。我需要检查我在处理器中检索到的KClass是否是数据类 我不能用 MyDataClass::class.isData 因为当您想要访问注释中的类或KClass参数时,会抛出MirroredTypeException,使用 try { element.getAnnotation(MyAnnotation::class.java).myClass } catch (mte: MirroredTypeException) {

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

我不能用

MyDataClass::class.isData
因为当您想要访问注释中的类或KClass参数时,会抛出
MirroredTypeException
,使用

try {
    element.getAnnotation(MyAnnotation::class.java).myClass
} catch (mte: MirroredTypeException) {
    typeElement = typeUtils.asElement(mte.typeMirror) as TypeElement
}
现在我只能使用TypeElement

Kotlinpoet提供了
KModifier
,其中包含
数据
属性,但它仅可用于类生成,不可用于读取


我如何才能有效地检查它?

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

与一些评论所说的相反,实际上可以在注释处理期间找到关于元素的Kotlin特定信息,尽管有点复杂。附加的Kotlin数据存储在协议缓冲区中的
@Metadata
-注释中。您可以使用读取
@元数据
-注释,然后按如下方式检查它们:

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

你能再澄清一点吗?你想从元素中获取类吗?我只想做一个检查,比如
if(class.isData){…}
。我不想让这门课自己上。我只是不知道用什么做检查。你能试试这个吗
element.javaClass.kotlin.isData
谢谢。我试过了,它总是返回false,不管是否是数据类,所以它不起作用。我刚刚意识到,在注释处理期间,您无法访问该类,因为它们尚未加载,更不用说编译了。在处理过程中,只能使用element和typeelements。恐怕它只描述java类。