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

时间:2017-12-18 17:27:05

标签: java kotlin kapt

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

为了消耗用kotlin编写的类,我在我的示例项目中切换到了kapt而不是apt。它适用于带注释的java-classes。 Bun kotlin-classes在访问类字段时有不同的方法:应该使用getter和setter。

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

1 个答案:

答案 0 :(得分:4)

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

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

在处理环境中没有kotlin标准库的情况下工作的版本:

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