2010-08-31 6 views
1

J'implémente dans Groovy un DSL pour un format de fichier existant. Dans ce format, nous avons une construction commeGroove DSL: manipulation des étiquettes


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

Et ici je problème avec cette dir: global_storage - groovy considère « dir: » comme un label, donc je ne peux pas le supporter.

Avez-vous une idée de la façon dont je peux recevoir un callback (getProperty, invokeMissingMethod) pour cette construction?

Merci!

Répondre

2

Je ne crois pas que vous puissiez réaliser cela de cette façon, vous devez changer un peu votre DSL pour être capable de capturer cette information. Voici comment vous pouvez y arriver:

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() 
} 

La sortie sera

dir [global_storage]

ou vous pouvez définir vous Dsl ainsi:

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

remplacer " test "par quelque chose de significatif pour votre domaine. Dans ce cas, la sortie serait

Test [[dir: global_storage]]

Hope this helps

-ken

+0

Merci. J'espérais pouvoir utiliser Groovy DSL comme analyseur pour le format existant sans aucun changement –