Kotlin反思:如何知道Kotlin类是否标记有“内部”可见性修饰符

时间:2018-10-28 18:33:34

标签: kotlin kotlin-reflect kotlinpoet

我正在使用KotlinPoet和Auto Service自动生成代码。我没有找到任何方法来了解带注释的类是否具有“内部”修饰符,因此可以使用相同的修饰符创建另一个类。例如:

@MyAnnotation
internal class Car

因此,我认为使用Kotlin Reflection可以获取此信息,但没有运气。

使用注释器处理器,我可以获取KClass,但是可见性表示为“ public”: enter image description here

有关如何执行操作的任何线索?

3 个答案:

答案 0 :(得分:1)

科特琳的KClass具有visibility属性,可以是KVisibility.INTERNAL

答案 1 :(得分:1)

Kotlin反射不适用于注释处理。 Kotlin反射用于在运行时中检查您的代码。 但是,有一种方法可以将Kotlin类文件中的元数据解析为kotlinx-metadata-jvm

要在注释处理器中使用它,必须获得kotlin.Metadata注释中的AnnotationMirror。在该镜像中,获取注释值并使用它们构建KotlinClassHeader,如您在kotlinx-metadata-jvm的示例中所见。在那里,您可以使用kotlinx-metadata-jvm提取类的标志。

答案 2 :(得分:0)

由于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