kotlin 注释处理:检查给定的 TypeElement 是否来自 kotlin-class
kotlin annotation processing: check if given TypeElement is from kotlin-class
我正在实施注释处理库,该库使用 java poet 基于具有特定注释的 classes 生成代码。
为了也使用用 kotlin 编写的 classes,我在我的示例项目中切换到 kapt 而不是 apt。它适用于带注释的 java-classes 就好了。 Bun kotlin-classes 使用不同的方法访问 class 字段:应该使用 getter 和 setter。
有没有办法确定给定的 class(更具体地说 - 不是 class 而是 TypeElement - 因为这是在编译之前发生的)是否是 java-class 还是用 kotlin 写的?基于此,我可以编写生成字段访问或使用 getter 访问的代码。
理论上,任何从 kotlin 编译的 class 都会被注释为 kotlin.Metadata
。
您可以在 TypeElement
上使用 getAnnotation
方法来检查该注释是否存在,以验证它们是否是用 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")
}
我正在实施注释处理库,该库使用 java poet 基于具有特定注释的 classes 生成代码。
为了也使用用 kotlin 编写的 classes,我在我的示例项目中切换到 kapt 而不是 apt。它适用于带注释的 java-classes 就好了。 Bun kotlin-classes 使用不同的方法访问 class 字段:应该使用 getter 和 setter。
有没有办法确定给定的 class(更具体地说 - 不是 class 而是 TypeElement - 因为这是在编译之前发生的)是否是 java-class 还是用 kotlin 写的?基于此,我可以编写生成字段访问或使用 getter 访问的代码。
理论上,任何从 kotlin 编译的 class 都会被注释为 kotlin.Metadata
。
您可以在 TypeElement
上使用 getAnnotation
方法来检查该注释是否存在,以验证它们是否是用 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")
}