DelegatingScript (Groovy 2.4.15)
Date: 2018-03-23

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);

  Author:
    Kohsuke Kawaguchi

- - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `DelegatingScript()`
    `protected` | `DelegatingScript(Binding binding)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.lang.Object` | `getDelegate()`
    `java.lang.Object` | `getProperty(java.lang.String property)` Retrieves a property value.
    `java.lang.Object` | `invokeMethod(java.lang.String name, java.lang.Object args)` Invoke a method (or closure in the binding) defined.
    `void` | `setDelegate(java.lang.Object delegate)` Sets the delegation target.
    `void` | `setProperty(java.lang.String property, java.lang.Object newValue)` Sets the given property to the new value.

    - ### 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 Detail

    - #### DelegatingScript

          protected DelegatingScript()

    - #### DelegatingScript

          protected DelegatingScript(Binding binding)

  - ### Method Detail

    - #### setDelegate

          public void setDelegate(java.lang.Object delegate)

      Sets the delegation target.

    - #### invokeMethod

          public java.lang.Object invokeMethod(java.lang.String name,
                                               java.lang.Object args)

      Description copied from class: `Script`
      Invoke a method (or closure in the binding) defined.
      Specified by:
        `invokeMethod` in interface `GroovyObject`
      Overrides:
        `invokeMethod` in class `Script`
      Parameters:
        `name` - method to call
        `args` - arguments to pass to the method
      Returns:
        value

    - #### getProperty

          public java.lang.Object getProperty(java.lang.String property)

      Description copied from interface: `GroovyObject`
      Retrieves a property value.
      Specified by:
        `getProperty` in interface `GroovyObject`
      Overrides:
        `getProperty` in class `Script`
      Parameters:
        `property` - the name of the property of interest
      Returns:
        the given property

    - #### setProperty

          public void setProperty(java.lang.String property,
                                  java.lang.Object newValue)

      Description copied from interface: `GroovyObject`
      Sets the given property to the new value.
      Specified by:
        `setProperty` in interface `GroovyObject`
      Overrides:
        `setProperty` in class `Script`
      Parameters:
        `property` - the name of the property of interest
        `newValue` - the new value for the property

    - #### getDelegate

          public java.lang.Object getDelegate()