我正在使用KotlinPoet和Auto Service自动生成代码。我没有找到任何方法来了解带注释的类是否具有“内部”修饰符,因此可以使用相同的修饰符创建另一个类。例如:
@MyAnnotation
internal class Car
因此,我认为使用Kotlin Reflection可以获取此信息,但没有运气。
使用注释器处理器,我可以获取KClass,但是可见性表示为“ public”:
有关如何执行操作的任何线索?
答案 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)
由于internal
是visibility 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