[ https://issues.apache.org/jira/browse/GROOVY-7074?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15009068#comment-15009068 ]
Shil Sinha commented on GROOVY-7074: ------------------------------------ If we ultimately just want a GroovyObject's invokeMethod to have precedence over its metaClass' invokeMethod, perhaps changing DelegatingScript#invokeMethod to something like this would be better? {code} public Object invokeMethod(String name, Object args) { try { if (delegate instanceof GroovyObject) { return ((GroovyObject) delegate).invokeMethod(name, args); } return metaClass.invokeMethod(delegate, name, args); } catch (MissingMethodException mme) { return super.invokeMethod(name, args); } } {code} > DelegatingScript does not work with Builder as delegate > ------------------------------------------------------- > > Key: GROOVY-7074 > URL: https://issues.apache.org/jira/browse/GROOVY-7074 > Project: Groovy > Issue Type: Bug > Components: GroovyScriptEngine > Affects Versions: 2.4.0-beta-3 > Environment: Windows 7, Linux Mint 16 Petra > Reporter: Tobias Schulte > Labels: patch-available > Attachments: > 0001-GROOVY-7074-fix-for-using-a-Builder-as-delegate-in-a.patch > > > DelegatingScript does not work, if the delegate is e.g. a MarkupBuilder > instance. > import org.codehaus.groovy.control.CompilerConfiguration > import groovy.xml.MarkupBuilder > def cc = new CompilerConfiguration() > cc.scriptBaseClass = DelegatingScript.class.name > def sh = new GroovyShell(new Binding(), cc) > def script = sh.parse(''' > foo { > bar() > } > ''') > def markupBuilder = new MarkupBuilder() > script.setDelegate(markupBuilder) > script.run() > does throw a groovy.lang.MissingMethodException. If I change the script to > delegate.foo { > bar() > } > it works. -- This message was sent by Atlassian JIRA (v6.3.4#6332)