Я новичок в обработке аннотаций и генерации кода. Я хочу узнать, как я могу выполнить такую операцию, как добавление нового метода в существующий класс. Вот пример того, что я хочу сделать:
Предположим, что у нас есть класс с такими пользовательскими аннотациями, как этот:
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 на класс.