Определение класса данных Kotlin отсутствует в roundEnv.rootElements (обработка аннотаций) - PullRequest
0 голосов
/ 25 апреля 2018

Внутри процессора аннотаций, который расширяется AbstractProcessor У меня есть:

override fun process(annotations: MutableSet<out TypeElement>, roundEnv: RoundEnvironment): Boolean {
    roundEnv.getElementsAnnotatedWith(FxBean::class.java)
        .forEach {
            val className = it.simpleName.toString()

            val metaDataClass = Class.forName("kotlin.Metadata").asSubclass(Annotation::class.java)
            val isKotlinClass = it.getAnnotation(metaDataClass) != null

            if (isKotlinClass) {
                // Trying to get the list of methods
                // of the data class with the @FxBean annotation.
                val methods = roundEnv.rootElements.find {
                    it.simpleName.toString() == className // This is never true
                }?.let {
                    val methods = mutableListOf<ExecutableElement>()
                    it.enclosedElements.forEach {
                        if (it is ExecutableElement) {
                            methods.add(it)
                        }
                    }
                    methods
                }
            }
        }
    return true
}

Чего мне не хватает?Есть ли способ получить Элемент, представляющий класс данных с обработкой аннотации @FxBean?

1 Ответ

0 голосов
/ 25 апреля 2018

Корневые элементы не обязательно являются аннотированными элементами, они корни .Корни обработки аннотаций могут быть отдельными элементами, аннотированными аннотациями, предназначенными для getSupportedAnnotationTypes () , или классами / пакетами, охватывающими набор этих элементов, - API несколько плохо определен, поэтому точный характер корневых элементовявляется расплывчатым.

Ситуация еще более осложняется тем фактом, что Kotlin и Gradle, начиная с последней версии, могут переносить API-интерфейсы процессора аннотаций и предоставлять свои собственные реализации RoundEnvironment.Эти реализации могут не вести себя должным образом, в соответствии со значениями по умолчанию javac.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...