Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 1.8.6
-
Fix Version/s: 3.0
-
Component/s: None
-
Labels:None
-
Testcase included:yes
-
Number of attachments :
Description
In a script, this works:
c =
{ println 'works' }c()
whereas this one doesn't:
def bind = new Binding(c:
{ println 'does not work' })
def t =
t.delegate = bind
t()
They both define a 'c' property in the binding which happens to be a closure. In the first case, the closure get's called as Groovy apparently tries to get the binding property and invoke it if it's a closure; in the latter, the delegate of the closure is a binding with a property 'c' that is a closure, but c() still doesn't work.
I debugged this and there is actually an if in MetaClassImpl that checks if the 'this' object is a Script, and if so, a property with the name is retrieved and a call() method is called. (MetaClassImpl#invokePropertyOrMissing:1089 in Groovy 1.8.6-all from maven central).