Package: groovy.util

## [Java] Class DelegatingScript

- groovy.util.DelegatingScript

-     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
    Constructor and description
    `protected DelegatingScript()` Creates a delegating script with an empty binding.
    `protected DelegatingScript(Binding binding)` Creates a delegating script using the supplied binding.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public Object` | `getDelegate()` Returns the current delegation target.
    `` | `public Object` | `getProperty(String property)` Resolves properties against the delegate before the script binding.
    `` | `public Object` | `invokeMethod(String name, Object args)` Delegates method invocation before falling back to normal script dispatch.
    `` | `public void` | `setDelegate(Object delegate)` Sets the delegation target.
    `` | `public void` | `setProperty(String property, Object newValue)` Sets a property on the delegate before falling back to the script binding.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Script` | `evaluate, evaluate, getBinding, getProperty, invokeMethod, print, printf, printf, println, println, run, run, setBinding, setProperty`
    `class GroovyObjectSupport` | `getMetaClass, setMetaClass`

- - ### Constructor Detail

    - #### protected DelegatingScript()

      Creates a delegating script with an empty binding.

    - #### protected DelegatingScript(Binding binding)

      Creates a delegating script using the supplied binding.

      Parameters:
        `binding` - the binding to use for the script

  - ### Method Detail

    - #### public Object getDelegate()

      Returns the current delegation target.

      Returns:
        the delegate object

    - #### public Object getProperty(String property)

      Resolves properties against the delegate before the script binding.

      Parameters:
        `property` - the property name
      Returns:
        the property value

    - #### public Object invokeMethod(String name, Object args)

      Delegates method invocation before falling back to normal script dispatch.

      Parameters:
        `name` - the method name
        `args` - the invocation arguments
      Returns:
        the invocation result

    - #### public void setDelegate(Object delegate)

      Sets the delegation target.

    - #### public void setProperty(String property, Object newValue)

      Sets a property on the delegate before falling back to the script binding.

      Parameters:
        `property` - the property name
        `newValue` - the new property value