0

在扩展的注释处理器中,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正在处理注释的数据类的元素?

4

1 回答 1

1

不保证根元素是带注释的元素,它们是。注释处理根可以是单个元素,使用注释进行注释,通过getSupportedAnnotationTypes()定位,或者包含这些元素的集合的类/包——API 的指定有些不明确,因此根元素的确切性质是模糊的。

由于 Kotlin 和最新版本的 Gradle 可能包装注释处理器 API 并提供自己的RoundEnvironment. 这些实现可能不会以与 javac 默认值一致的方式运行。

于 2018-04-25T02:17:35.627 回答