Как аннотировать свойство аннотации в kotlin? - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь разместить аннотацию на свойстве аннотации.Я понимаю, что я должен иметь доступ к нему в коде - но я не могу.Чего мне не хватает?

package com.example.annotations

import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import kotlin.reflect.full.findAnnotation

class AnnotationIssueTest {
    @Test
    fun testAnnotations() {
        Assertions.assertNotNull(MyTestAnnotation::value.findAnnotation<PropertyMarker>())
    }

    @Test
    fun testRegularClass() {
        Assertions.assertNotNull(MyTestClass::value.findAnnotation<PropertyMarker>())
    }
}


@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class PropertyMarker

annotation class MyTestAnnotation(
        @PropertyMarker val value: String
)

class MyTestClass(
        @PropertyMarker val value: String
)

Когда я запускаю данный тест, testAnnotations терпит неудачу, в то время как testRegularClass проходит.Это ошибка или я что-то не так делаю?

1 Ответ

0 голосов
/ 26 февраля 2019

По какой-то причине аннотации свойств аннотации не попадают в байт-код.Однако вместо этого вы можете комментировать методы получения свойств:

class AnnotationIssueTest {
    @Test
    fun testAnnotations() {
        Assertions.assertNotNull(MyTestAnnotation::value.getter.findAnnotation<PropertyMarker>())
    }

    @Test
    fun testRegularClass() {
        Assertions.assertNotNull(MyTestClass::value.getter.findAnnotation<PropertyMarker>())
    }
}


@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY_GETTER)
annotation class PropertyMarker

annotation class MyTestAnnotation(
        @get:PropertyMarker val value: String
)

class MyTestClass(
        @get:PropertyMarker val value: String
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...