Package groovy.util

# Class DelegatingScript

java.lang.Object
groovy.lang.GroovyObjectSupport
groovy.lang.Script
groovy.util.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);

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `DelegatingScript()`
  Creates a delegating script with an empty binding.
  `protected`
  `DelegatingScript(Binding binding)`
  Creates a delegating script using the supplied binding.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object`
  `getDelegate()`
  Returns the current delegation target.
  `Object`
  `getProperty(String property)`
  Resolves properties against the delegate before the script binding.
  `Object`
  `invokeMethod(String name, Object args)`
  Delegates method invocation before falling back to normal script dispatch.
  `void`
  `setDelegate(Object delegate)`
  Sets the delegation target.
  `void`
  `setProperty(String property, Object newValue)`
  Sets a property on the delegate before falling back to the script binding.

  ### Methods inherited from class groovy.lang.Script

  `evaluate, evaluate, getBinding, print, printf, printf, println, println, run, run, setBinding`

  ### Methods inherited from class groovy.lang.GroovyObjectSupport

  `getMetaClass, setMetaClass`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### DelegatingScript

    protected DelegatingScript()
    Creates a delegating script with an empty binding.

  - ### DelegatingScript

    protected DelegatingScript(Binding binding)
    Creates a delegating script using the supplied binding.
    Parameters:
      `binding` - the binding to use for the script

- ## Method Details

  - ### setDelegate

    public void setDelegate(Object delegate)
    Sets the delegation target.

  - ### invokeMethod

    public Object invokeMethod(String name, Object args)
    Delegates method invocation before falling back to normal script dispatch.
    Specified by:
      `invokeMethod` in interface `GroovyObject`
    Overrides:
      `invokeMethod` in class `Script`
    Parameters:
      `name` - the method name
      `args` - the invocation arguments
    Returns:
      the invocation result

  - ### getProperty

    public Object getProperty(String property)
    Resolves properties against the delegate before the script binding.
    Specified by:
      `getProperty` in interface `GroovyObject`
    Overrides:
      `getProperty` in class `Script`
    Parameters:
      `property` - the property name
    Returns:
      the property value

  - ### setProperty

    public void setProperty(String property, Object newValue)
    Sets a property on the delegate before falling back to the script binding.
    Specified by:
      `setProperty` in interface `GroovyObject`
    Overrides:
      `setProperty` in class `Script`
    Parameters:
      `property` - the property name
      `newValue` - the new property value

  - ### getDelegate

    public Object getDelegate()
    Returns the current delegation target.
    Returns:
      the delegate object