У меня есть Groovy script, который позволяет пользователю определять некоторые динамические свойства и методы, а затем выполняет определяемое пользователем закрытие. Скрипт будет выглядеть так:
// init properties and methods dynamically at runtime
context.prop1 = "Some test value"
context.method1 = { String input ->
"exec " + input.toUpperCase()
}
// "this" is set to the context variable from above
run {
println method1( prop1 )
}
Таким образом, в начале скрипта context инициализируется с определенными пользователем свойствами (например, prop1) и методами (например, method1). Затем контекст используется в качестве указателя this при закрытии цикла. Я достиг этого путем динамического расширения метакласса контекста и установки контекста в качестве делегата закрытия запуска (с DELEGATE_FIRST в качестве стратегии разрешения).
В настоящее время я борюсь с проверкой типов. Перед выполнением закрытия прогона я хотел бы проверить, действительно ли method1 ожидает prop1. Я просмотрел аннотацию DelegatesTo. , но, похоже, это не работает для динамически расширяемых объектов. Я также играл с AST, но, поскольку мои знания по этой теме ограничены, я не нашел решения. Если то, чего я хочу достичь, возможно, любые указатели в правильном направлении будут очень признательны.