You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2015/12/28 08:24:57 UTC

[2/2] groovy git commit: GROOVY-7074: DelegatingScript does not work with Builder as delegate (closes #216)

GROOVY-7074: DelegatingScript does not work with Builder as delegate (closes #216)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/03d4262a
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/03d4262a
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/03d4262a

Branch: refs/heads/GROOVY_2_4_X
Commit: 03d4262a573c0c190e8b2305bc080329dea8f13f
Parents: 6e416ce
Author: pascalschumacher <pa...@gmx.net>
Authored: Mon Dec 28 08:24:02 2015 +0100
Committer: pascalschumacher <pa...@gmx.net>
Committed: Mon Dec 28 08:24:45 2015 +0100

----------------------------------------------------------------------
 src/main/groovy/util/DelegatingScript.java       |  6 +++++-
 src/test/groovy/util/DelegatingScriptTest.groovy | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/03d4262a/src/main/groovy/util/DelegatingScript.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/util/DelegatingScript.java b/src/main/groovy/util/DelegatingScript.java
index 18594cd..959c8e8 100644
--- a/src/main/groovy/util/DelegatingScript.java
+++ b/src/main/groovy/util/DelegatingScript.java
@@ -19,6 +19,7 @@
 package groovy.util;
 
 import groovy.lang.Binding;
+import groovy.lang.GroovyObject;
 import groovy.lang.MetaClass;
 import groovy.lang.MissingMethodException;
 import groovy.lang.MissingPropertyException;
@@ -107,7 +108,10 @@ public abstract class DelegatingScript extends Script {
     @Override
     public Object invokeMethod(String name, Object args) {
         try {
-            return metaClass.invokeMethod(delegate,name,args);
+            if (delegate instanceof GroovyObject) {
+                return ((GroovyObject) delegate).invokeMethod(name, args);
+            }
+            return metaClass.invokeMethod(delegate, name, args);
         } catch (MissingMethodException mme) {
             return super.invokeMethod(name, args);
         }

http://git-wip-us.apache.org/repos/asf/groovy/blob/03d4262a/src/test/groovy/util/DelegatingScriptTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/util/DelegatingScriptTest.groovy b/src/test/groovy/util/DelegatingScriptTest.groovy
index b4ec977..162ff3c 100644
--- a/src/test/groovy/util/DelegatingScriptTest.groovy
+++ b/src/test/groovy/util/DelegatingScriptTest.groovy
@@ -19,6 +19,8 @@
 package groovy.util
 
 import org.codehaus.groovy.control.CompilerConfiguration
+import groovy.xml.MarkupBuilder
+import java.io.StringWriter
 
 public class DelegatingScriptTest extends GroovyTestCase {
     public void testDelegatingScript() throws Exception {
@@ -37,6 +39,22 @@ public class DelegatingScriptTest extends GroovyTestCase {
         assert dsl.foo==6;
         assert dsl.innerBar()=='testset';
     }
+
+    public void testUseMarkupBuilderAsDelegate() throws Exception {
+        def cc = new CompilerConfiguration()
+        cc.scriptBaseClass = DelegatingScript.class.name
+        def sh = new GroovyShell(new Binding(), cc)
+        def script = sh.parse(''' foo{ bar() }
+        ''')
+        StringWriter sw = new StringWriter()
+        def markupBuilder = new MarkupBuilder(sw)
+        script.setDelegate(markupBuilder)
+        script.run()
+
+        assert sw.toString() == """<foo>
+  <bar />
+</foo>"""
+    }
 }
 
 class MyDSL {