Обработка аннотаций для делегированных свойств - PullRequest
0 голосов
/ 20 декабря 2018

В моем текущем проекте я пишу AnnotationProcessor, который должен сгенерировать некоторый код для делегированных свойств в моем аннотированном классе.Допустим, мой класс модели выглядит следующим образом:

@Gen
class TestModel {
    var itemBoolean: Boolean by loader("xyz", true)
}

В моем процессоре аннотаций я хочу получить все делегированные свойства из аннотированного класса.Я не нашел способа фильтровать VariableElement по делегату, поэтому здесь я перебираю все свойства:

val classes = roundEnv.getElementsAnnotatedWith(Gen::class.java)

for(cls: Element in classes) {
    val props = cls.enclosedElements.filterIsInstance<VariableElement>()

    for(prop: VariableElement in props) {
        // ...
    }
}

Чтобы сгенерировать свой код с помощью KotlinPoet, мне нужно получить имя свойства, типсвойство (здесь Boolean) и аргумент String xyz.В качестве имени я попытался использовать prop.simpleName, что дает мне имя, но с суффиксом ${'$'}delegate.Тип, возвращаемый prop.asType, является типом делегата, а не типом свойства.А что касается строки аргумента, я понятия не имею, как получить к ней доступ.

У вас есть идеи, как мне это сделать?

...