1

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

@MyAnnotation
internal class Car

所以我认为使用 Kotlin Reflection 可以获得这些信息,但没有运气。

使用注释器处理器,我可以获得 KClass,但可见性显示为“公共”: 在此处输入图像描述

关于如何做的任何线索?

4

3 回答 3

2

Kotlin 的KClass属性visibility可以是KVisibility.INTERNAL.

于 2018-10-28T18:40:07.260 回答
2

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

要在注释处理器中使用它,您必须获取注释AnnotationMirror的。kotlin.Metadata从该镜像中,获取注释值并使用它们来构造KotlinClassHeaderkotlinx-metadata-jvm 示例中的内容。到达那里后,您可以使用 kotlinx-metadata-jvm 为您的班级提取标志。

于 2018-10-29T12:11:32.770 回答
0

由于internal可见性修饰符,您应该在KClassAPI 中查找相关内容。以下内容将为您提供帮助:

 /**
 * 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

于 2018-10-28T18:42:08.827 回答