Groovy DSL: обработка этикеток - PullRequest
1 голос
/ 31 августа 2010

Я внедряю в Groovy DSL для некоторых существующих форматов файлов. В этом формате у нас есть конструкция типа


group basic_test {
   test vplan_testing  {
         dir: global_storage;
   };
};

И здесь у меня проблема с этим dir: global_storage - groovy считает "dir:" меткой, поэтому я не могу с этим справиться.

У вас есть идея, как я могу получить некоторый обратный вызов (getProperty, invokeMissingMethod) для этой конструкции?

Спасибо!

1 Ответ

2 голосов
/ 01 сентября 2010

Я не верю, что вы можете достичь этого, вам нужно немного изменить свой 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'
        }
    }
}

замените «тест» чем-то значимым для вашего домена. В этом случае вывод будет

test [[dir: global_storage]]

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

1021 * Кен *

...