Package groovy.util

Class DelegatingScript

All Implemented Interfaces:
GroovyObject

public abstract class DelegatingScript
extends Script
Script that performs method invocations and property access like Closure does.

DelegatingScript is a convenient basis for loading a custom-defined DSL as a 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 = ...;
 

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 DelegatingScript as the base class, the code will run as:

 delegate.a = 1;
 delegate.b(2);
 
... whereas in plain Script, this will be run as:
 binding.setProperty("a",1);
 ((Closure)binding.getProperty("b")).call(2);