2010-08-31 7 views
1

Я реализую в Groovy DSL для некоторого существующего формата файла. В этом формате мы имеем конструкцию, какGroovy DSL: обработка меток


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

А вот у меня есть проблемы с этим dir: global_storage - заводной считает «реж:» как ярлык, так что я не могу справиться с этим.

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

Спасибо!

ответ

2

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

Выход будет

реж [global_storage]

или вы могли бы определить вы Dsl таким образом:

class Foo { 
    static plan = { 
     vplan_testing { 
      test dir:'global_storage' 
     } 
    } 
} 

заменить " тест "с помощью чего-то значимого для вас домена. В этом случае результат будет

тест [[реж: global_storage]]

Надеется, что это помогает

Кен
+0

Спасибо. Я надеялся, что могу использовать Groovy DSL в качестве парсера для существующего формата без каких-либо изменений –

Смежные вопросы