Является ли отражение RoundEnv.getElementsAnnotatedWith (AnnotationName :: class.java) при использовании с @Repeatable @Retention (AnnotationRetention.Source) - PullRequest
0 голосов
/ 06 июля 2019

При создании AbstractProcessor в Android-студии с помощью kapt / kotlinpoet.Когда я пытаюсь использовать повторяемый тег аннотации, он перестает получать данные обратно из roundEnv.getElementsAnnotatedWith (AnnotationName :: class.java), я могу получить информацию о аннотированных классах, если повторяющийся тег удален из аннотации

попробую использовать другие средства отражения

@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
@Repeatable // <-- issue 
annotation class ConfigurableGroup(
    val key: String,
    val text: String
)
// the processor abbreviated

@AutoService(Processor::class)
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedOptions(AnnotationProcessorNew.
KAPT_KOTLIN_GENERATED_OPTION_NAME)
class AnnotationProcessorNew : AbstractProcessor(){

override fun process(annotations: MutableSet<out TypeElement>, roundEnv: 
RoundEnvironment): Boolean {
    return generateConfigurables(roundEnv)
}

override fun getSupportedAnnotationTypes(): MutableSet<String> {
    return mutableSetOf(
ConfigurableGroup::class.java.name
}

roundEnv.getElementsAnnotatedWith(ConfigurableGroup::class.java)
       .filter { it.kind == ElementKind.CLASS }
       .forEach { classElement ->

          val classPackageName = 
processingEnv.elementUtils.getPackageOf(classElement).toString()
               val classSimpleName = classElement.simpleName.toString()

Я ожидаю получить данные из отражения оба раза, когда аннотация имеет тег @repeatable или нет.

...