Я строй DSL в Groovy, который должен позволить использовать интерполяцию строки внутри DSL:Как получить доступ к переменным внутри интерполяции строк в Groovy DSL
def dsl = """
def projectName = "test"
project("${projectName}/123") {
task {
}
}
"""
К сожалению, при использовании следующего кода интерпретировать выше DSL, то Groovy интерпретатор не знает projectName
(и дает MissingPropertyException):
class ProjectSpec {
def name
void task(closure) {
}
}
binding.project = { name, closure ->
def project = new ProjectSpec()
project.name = name
def code = closure.rehydrate(project, this, this)
code.resolveStrategy = Closure.DELEGATE_ONLY
code()
project
}
def shell = new GroovyShell(binding)
Script script = shell.parse(dsl)
project = script.run()
println project.name
Как я могу добиться этого? Думаю, мне нужно отложить оценку GString. Должен ли я использовать для этого ASTTransformation?
Спасибо,
Майкл