Ich baue eine DSL in Groovy, die String-Interpolation innerhalb des DSL erlauben sollte zu verwenden:Wie für den Zugriff auf Variablen in String-Interpolation in einem starken DSL
def dsl = """
def projectName = "test"
project("${projectName}/123") {
task {
}
}
"""
Leider, wenn Sie den folgenden Code unter Verwendung der interpretieren über DSL, ist der Groovy Interpreter nicht bewusst projectName
(und ergibt ein 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
Wie kann ich das erreichen? Ich denke, ich muss die Auswertung des GString verschieben. Muss ich dafür eine ASTTransformation verwenden?
Danke,
Michael