Я новичок в обработке аннотаций и генерации кода. Я хочу выяснить, как я могу выполнить такую операцию, как добавление нового метода в существующий класс. Вот пример того, что я хочу сделать:
Предположим, что у нас есть класс с пользовательскими аннотациями, такими как этот:
class SourceClass {
@CustomAnnotation
fun annotatedFun1(vararg argument: Any) {
//Do something
}
@CustomAnnotation
fun annotatedFun2(vararg argument: Any) {
//Do something
}
fun someOtherFun() {
//Do something
}
}
И результат, который я хочу получить - расширенная копия этого класса:
class ResultClass {
fun hasFunWithName(name: String): Boolean {
return (name in arrayOf("annotatedFun1", "annotatedFun2"))
}
fun callFunByName(name: String, vararg arguments: Any) {
when (name) {
"annotatedFun1" -> annotatedFun1(*arguments)
"annotatedFun2" -> annotatedFun2(*arguments)
}
}
fun annotatedFun1(vararg argument: Any) {
//Do something
}
fun annotatedFun2(vararg argument: Any) {
//Do something
}
fun someOtherFun() {
//Do something
}
}
Я уже узнал, как создать процессор аннотаций. Я ищу способ сохранить все существующие поля, свойства и методы в исходном классе и добавить к нему еще несколько методов.
Если есть возможность изменить класс без создания нового - это было бы прекрасно, но во всех руководствах создаются только новые классы, и я не нашел ни одного примера, где все содержимое исходного класса копируется в другой.
Пожалуйста, не советуйте использовать отражение. Мне нужно это для Android, и поэтому отражение не является причиной выбора стоимости ресурсов. Я ищу решение во время компиляции.
Требуется для пользовательского языка сценариев, реализованного в приложении, и должен использоваться для упрощения структуры классов-оболочек. Когда эта работа выполняется непосредственно в коде - это выглядит ужасно, когда количество таких методов превышает 20 на класс.