Groovy DSL: обработка этикеток
Я внедряю в Groovy DSL для некоторых существующих форматов файлов. В этом формате у нас есть такая конструкция
group basic_test {
test vplan_testing {
dir: global_storage;
};
};
И вот у меня проблема с этим dir: global_storage
- groovy считает "dir:" ярлыком, поэтому я не могу с этим справиться.
У вас есть идея, как я могу получить некоторый обратный вызов (getProperty, invokeMissingMethod) для этой конструкции?
Спасибо!
1 ответ
Решение
Я не верю, что вы можете достичь этого таким образом, вам нужно немного изменить свой dsl, чтобы иметь возможность собирать эту информацию. Вот как вы можете этого добиться:
class Foo {
static plan = {
vplan_testing {
dir 'global_storage'
}
}
}
def closure = Foo.plan
closure.delegate = this
closure()
def methodMissing(String name, Object args) {
println "$name $args"
if(args[0] instanceof Closure)
args[0].call()
}
Выход будет
dir [global_storage]
или вы могли бы определить вас DSL таким образом:
class Foo {
static plan = {
vplan_testing {
test dir:'global_storage'
}
}
}
замените "тест" чем-то значимым для вашего домена. В этом случае вывод будет
тест [[dir:global_storage]]
Надеюсь это поможет
Кен