Kotlin Reflection: Как узнать, помечен ли класс Kotlin «внутренним» модификатором видимости - PullRequest
0 голосов
/ 28 октября 2018

Я автоматически генерирую код с помощью KotlinPoet и Auto Service. Я не нашел способа узнать, имеет ли аннотированный класс модификатор «internal», чтобы я мог создать другой класс с таким же модификатором. Например:

@MyAnnotation
internal class Car

Поэтому я подумал, что с помощью Kotlin Reflection я смогу получить эту информацию, но не повезло.

С процессором-аннотатором я могу получить KClass, но видимость сказала "public": enter image description here

Есть какие-нибудь подсказки, как это сделать?

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Поскольку 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

0 голосов
/ 29 октября 2018

Отражение Котлина не применяется при обработке аннотаций.Отражение Kotlin предназначено для проверки вашего кода в время выполнения .Однако существует способ анализа метаданных из файлов классов Kotlin, он называется kotlinx-metadata-jvm .

Чтобы использовать это в процессоре аннотаций, вам необходимо получитьAnnotationMirror аннотации kotlin.Metadata.Из этого зеркала получите значения аннотаций и используйте их для построения KotlinClassHeader, как вы можете видеть в примерах для kotlinx-metadata-jvm.Когда вы окажетесь там, вы можете использовать kotlinx-metadata-jvm, чтобы извлечь флаги для вашего класса.

0 голосов
/ 28 октября 2018

Котлин KClass обладает свойством visibility, которое может быть KVisibility.INTERNAL.

...