Kotlin 反思:如何知道 Kotlin class 是否标有 "internal" 可见性修饰符

Kotlin Reflection: How to know if a Kotlin class is marked with "internal" visibility modifier

我正在使用 KotlinPoet 和自动服务自动生成代码。我没有找到任何方法来知道带注释的 class 是否具有 "internal" 修饰符,因此我可以创建另一个具有相同修饰符的 class 。例如:

@MyAnnotation
internal class Car

所以我想使用 Kotlin Reflection 我可以得到这些信息,但没有成功。

使用注释器处理器,我可以获得 KClass,但可见性显示 "public":

关于如何操作的任何线索?

Kotlin 的 KClassvisibility 属性,可以是 KVisibility.INTERNAL.

由于 internalvisibility modifier,您应该在 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

Kotlin 反射在注释处理期间不适用。 Kotlin 反射用于在 运行时 检查您的代码。 然而,有一种方法可以从 Kotlin class 文件中解析出元数据,它被称为 kotlinx-metadata-jvm.

要在注释处理器中使用它,您必须获得 kotlin.Metadata 注释的 AnnotationMirror。从该镜像中,获取注释值并使用它们构造 KotlinClassHeader,如您在 kotlinx-metadata-jvm 的示例中所见。到达那里后,您可以使用 kotlinx-metadata-jvm 为您的 class.

提取标志