[ https://issues.apache.org/jira/browse/GROOVY-8146?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles updated GROOVY-8146: -------------------------------- Environment: (was: Windows 7 x64 with runtime from org.codehaus.groovy:groovy-all:2.5.0-alpha-1) > Callable properties of closure delegate cannot be called implicitly > ------------------------------------------------------------------- > > Key: GROOVY-8146 > URL: https://issues.apache.org/jira/browse/GROOVY-8146 > Project: Groovy > Issue Type: Improvement > Components: groovy-runtime > Affects Versions: 2.5.0-alpha-1 > Reporter: David Attia > Priority: Major > > Where a closure's delegate has a property with a call method, the method > cannot be called inline. > {noformat} > class DelegateMember { > void call(@DelegatesTo(DelegateMember) Closure closure) { > closure.delegate = this > closure.call() > } > > void sayHello() { println 'hello' } > } > class Delegate { > DelegateMember delegateMember = new DelegateMember() > } > void callAndDelegate(@DelegatesTo(Delegate) Closure closure) { > closure.delegate = new Delegate() > closure.call() > } > callAndDelegate { > delegateMember { // intended get and call of delegateMember > sayHello() > } > } > {noformat} > In the above example, I'm hoping for the commented line to call the synthetic > getter for delegateMember and to then call it with the closure parameter > (code block). > My IDE (IntelliJ IDEA 2016.2.2) interprets this code in the way I hoped the > runtime would (asking to go to the declaration of sayHello from the call > within the closure takes me to the declaration of the sayHello method), but > execution fails with message: > {noformat} > Caught: groovy.lang.MissingMethodException: No signature of method: > scratch_groovy.delegateMember() is applicable for argument types: > (scratch_groovy$_run_closure1_closure2) values: > [scratch_groovy$_run_closure1_closure2@6b46a226] > groovy.lang.MissingMethodException: No signature of method: > scratch_groovy.delegateMember() is applicable for argument types: > (scratch_groovy$_run_closure1_closure2) values: > [scratch_groovy$_run_closure1_closure2@6b46a226] > at scratch_groovy$_run_closure1.doCall(scratch_groovy.groovy:21) > at scratch_groovy$_run_closure1.doCall(scratch_groovy.groovy) > at scratch_groovy.callAndDelegate(scratch_groovy.groovy:17) > at scratch_groovy$callAndDelegate.callCurrent(Unknown Source) > at scratch_groovy.run(scratch_groovy.groovy:20) > at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) > at > com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:48) > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)