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

我正在实现注释处理库,它使用基于具有特定注释的类的java诗人生成代码。

也要使用kotlin编写的类我已经切换到kapt而不是apt在我的示例项目。 它适用于注释的Java类就好了。 Bun kotlin-classes在访问类字段方面有不同的方法:应该使用getter和setter。

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

从理论上讲,从kotlin编译的任何类都将被注释为kotlin.Metadata 。 您可以使用TypeElement上的getAnnotation方法来检查该注释是否存在以validation它们是否写入kotlin。

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

在处理环境中没有kotlin标准库的版本:

 elementUtils.getAllAnnotationMirrors(typeElement).any { elementUtils.getBinaryName(it.annotationType).contentEquals("kotlin.Metadata") }