DSL Groovy: definindo propriedades como funções

Recentemente, eu queria ser capaz de definir propriedades em um objeto em um encerramento sem precisar usar o =operador.

Isso é o que eu não queria fazer:


closure
= {
foo
= "abc"
bar
= "efg"
}

Isso é o que eu realmente queria fazer:

closure = {
foo
"abc"
bar
"efg"
}

Para fazer isso, implementei a função methodMissing, vi se aquele objeto tinha a propriedade e, se tiver, configurei essa propriedade.

class MyClosure {
def foo
def bar

def methodMissing(String name, args) {
if(this.properties.containsKey(name)) {
setProperty
(name,args)
}
}
}

closure
= {
foo
"abc"
bar
"efg"
}

myClosure
= new MyClosure()
closure
.delegate = myClosure
closure
.resolveStrategy = Closure.DELEGATE_FIRST
closure
()
myClosure
.properties.each{key,value-> println key + ": " + value}