我正在使用 KotlinPoet 和 Auto Service 自动生成代码。我没有找到任何方法来知道带注释的类是否具有“内部”修饰符,因此我可以创建另一个具有相同修饰符的类。例如:
@MyAnnotation
internal class Car
所以我认为使用 Kotlin Reflection 可以获得这些信息,但没有运气。
使用注释器处理器,我可以获得 KClass,但可见性显示为“公共”:
关于如何做的任何线索?
Kotlin 的KClass
属性visibility
可以是KVisibility.INTERNAL
.
Kotlin 反射在注释处理期间不适用。Kotlin 反射用于在运行时检查您的代码。然而,有一种方法可以从 Kotlin 类文件中解析元数据,它被称为kotlinx-metadata-jvm。
要在注释处理器中使用它,您必须获取注释AnnotationMirror
的。kotlin.Metadata
从该镜像中,获取注释值并使用它们来构造KotlinClassHeader
kotlinx-metadata-jvm 示例中的内容。到达那里后,您可以使用 kotlinx-metadata-jvm 为您的班级提取标志。
由于internal
是可见性修饰符,您应该在KClass
API 中查找相关内容。以下内容将为您提供帮助:
/**
* Visibility of this class, or `null` if its visibility cannot be represented in Kotlin.
*/
@SinceKotlin("1.1")
public val visibility: KVisibility?
像这样使用:Car::class.visibility //INTERNAL