Java kotlin注释处理:检查给定的TypeElement是否来自kotlin类

Java kotlin注释处理:检查给定的TypeElement是否来自kotlin类,java,kotlin,kapt,Java,Kotlin,Kapt,我正在实现注释处理库,该库基于具有特定注释的类,使用JavaPoter生成代码 为了使用用kotlin编写的类,在我的示例项目中,我已经切换到kapt而不是apt。它可以很好地处理带注释的java类。Bun kotlin类使用不同的方法访问类字段:应该使用getter和setter 有没有办法确定给定的类(更具体地说,不是一个类而是一个TypeElement,因为这发生在编译之前)是java类还是用kotlin编写的?基于这一点,我可以编写代码来生成访问字段或用于访问的getter。理论上,从k

我正在实现注释处理库,该库基于具有特定注释的类,使用JavaPoter生成代码

为了使用用kotlin编写的类,在我的示例项目中,我已经切换到kapt而不是apt。它可以很好地处理带注释的java类。Bun kotlin类使用不同的方法访问类字段:应该使用getter和setter


有没有办法确定给定的类(更具体地说,不是一个类而是一个TypeElement,因为这发生在编译之前)是java类还是用kotlin编写的?基于这一点,我可以编写代码来生成访问字段或用于访问的getter。

理论上,从kotlin编译的任何类都将使用
kotlin.Metadata
进行注释。 您可以使用
TypeElement
上的
getAnnotation
方法检查注释是否存在,以验证它们是否是用kotlin编写的

val metaDataClass = Class.forName("kotlin.Metadata").asSubclass(Annotation::class.java)
val isKotlinClass = <TypeElement>.getAnnotation(metaDataClass) != null

理论上,从kotlin编译的任何类都将使用
kotlin.Metadata
进行注释。 您可以使用
TypeElement
上的
getAnnotation
方法检查注释是否存在,以验证它们是否是用kotlin编写的

val metaDataClass = Class.forName("kotlin.Metadata").asSubclass(Annotation::class.java)
val isKotlinClass = <TypeElement>.getAnnotation(metaDataClass) != null

编译器说我们不能指定该类来获取注释:它具有内部可视性您需要使用反射或在Java中编写检查,因为在处理Java互操作时,
internal
变成
public
。或者。。。我设法使用以下方法解析了
isKotlinClass
检查:
isKotlinClass=elementUtils.getAllAnnotationMirrors(typeElement).any{(it.annotationType.asElement()as typeElement.).qualifiedName.toString()==“kotlin.Metadata”}
btw,上面的示例(一旦重新写入Java)允许确定
isKotlinClass
,而无需添加kotlin依赖项,这很方便。添加了一个使用
元素
提取注释名称的版本。编译器说我们无法指定该类来获取注释:它具有内部可见性您需要使用反射或在Java中编写检查,因为在处理java互操作时,
internal
变成了
public
。。。我设法使用以下方法解析了
isKotlinClass
检查:
isKotlinClass=elementUtils.getAllAnnotationMirrors(typeElement).any{(it.annotationType.asElement()as typeElement.).qualifiedName.toString()==“kotlin.Metadata”}
btw,上面的示例(一旦重新写入Java)允许确定
isKotlinClass
,而无需添加kotlin依赖项,这很方便。添加了使用
元素
提取注释名称的版本。无编辑建议的下一票,无注释。。。没有什么这有什么用?没有编辑建议的否决票,没有评论。。。没有什么这怎么会有用呢?