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") }