[Java] Class DelegatingScript

  • groovy.util.DelegatingScript

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

Properties Summary

Properties
Type Name and description
Object delegate
Object property

Constructor Summary

Constructors
Constructor and description
protected DelegatingScript ()
protected DelegatingScript (Binding binding)

Methods Summary

Methods
Type Params Return Type Name and description
Object getDelegate()
Object getProperty(String property)
Object invokeMethod(String name, Object args)
void setDelegate(Object delegate)
Sets the delegation target.
void setProperty(String property, Object newValue)

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, getProperty, invokeMethod, setMetaClass, setProperty

Property Detail

Object delegate

Object property

Constructor Detail

protected DelegatingScript()

protected DelegatingScript(Binding binding)

Method Detail

public Object getDelegate()

@Override public Object getProperty(String property)

@Override public Object invokeMethod(String name, Object args)

public void setDelegate(Object delegate)

Sets the delegation target.

@Override public void setProperty(String property, Object newValue)

© 2003-2020 The Apache Software Foundation
Licensed under the Apache license.
https://docs.groovy-lang.org/2.5.14/html/gapi/groovy/util/DelegatingScript.html