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]]

Надеюсь это поможет

Кен

Другие вопросы по тегам