{@link DelegatingScript} is a convenient basis for loading a custom-defined DSL as a {@link Script}, then execute it. The following sample code illustrates how to do it:
class MyDSL { public void foo(int x, int y, Closure z) { ... } public void setBar(String a) { ... } } CompilerConfiguration cc = new CompilerConfiguration(); cc.setScriptBaseClass(DelegatingScript.class.getName()); GroovyShell sh = new GroovyShell(cl,new Binding(),cc); DelegatingScript script = (DelegatingScript)sh.parse(new File("my.dsl")) script.setDelegate(new MyDSL()); script.run();
my.dsl can look like this:
foo(1,2) { .... } bar = ...;
{@link DelegatingScript} does this by delegating property access and method invocation to the delegate object.
More formally speaking, given the following script:
a = 1; b(2);
Using {@link DelegatingScript} as the base class, the code will run as:
delegate.a = 1; delegate.b(2);... whereas in plain {@link Script}, this will be run as:
binding.setProperty("a",1); ((Closure)binding.getProperty("b")).call(2);@author Kohsuke Kawaguchi
|
|