Package groovy.util
Class DelegatingScript
java.lang.Object
groovy.lang.GroovyObjectSupport
groovy.lang.Script
groovy.util.DelegatingScript
- All Implemented Interfaces:
GroovyObject
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
ConstructorsModifierConstructorDescriptionprotectedCreates a delegating script with an empty binding.protectedDelegatingScript(Binding binding) Creates a delegating script using the supplied binding. -
Method Summary
Modifier and TypeMethodDescriptionReturns the current delegation target.getProperty(String property) Resolves properties against the delegate before the script binding.invokeMethod(String name, Object args) Delegates method invocation before falling back to normal script dispatch.voidsetDelegate(Object delegate) Sets the delegation target.voidsetProperty(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, setBindingMethods inherited from class groovy.lang.GroovyObjectSupport
getMetaClass, setMetaClass
-
Constructor Details
-
DelegatingScript
protected DelegatingScript()Creates a delegating script with an empty binding. -
DelegatingScript
Creates a delegating script using the supplied binding.- Parameters:
binding- the binding to use for the script
-
-
Method Details
-
setDelegate
Sets the delegation target. -
invokeMethod
Delegates method invocation before falling back to normal script dispatch.- Specified by:
invokeMethodin interfaceGroovyObject- Overrides:
invokeMethodin classScript- Parameters:
name- the method nameargs- the invocation arguments- Returns:
- the invocation result
-
getProperty
Resolves properties against the delegate before the script binding.- Specified by:
getPropertyin interfaceGroovyObject- Overrides:
getPropertyin classScript- Parameters:
property- the property name- Returns:
- the property value
-
setProperty
Sets a property on the delegate before falling back to the script binding.- Specified by:
setPropertyin interfaceGroovyObject- Overrides:
setPropertyin classScript- Parameters:
property- the property namenewValue- the new property value
-
getDelegate
Returns the current delegation target.- Returns:
- the delegate object
-