В моем текущем проекте я пишу 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
, является типом делегата, а не типом свойства.А что касается строки аргумента, я понятия не имею, как получить к ней доступ.
У вас есть идеи, как мне это сделать?