Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
There is a nested closures variable scope visibility issue.
(var a; closure-one("a is visible" closure-two("a is not visible"))
I've attached a test case which illustrate that better :
ClosureInClosureBug.groovy
Don't forget to uncomment the commented line to see the issue.
Otherwise the test will pass of course !
Here is the stacktrace I caught with this test case:
Caught: groovy.lang.MissingPropertyException: No such property: text for class: ClosureInClosureBug$2
groovy.lang.MissingPropertyException: No such property: text for class: ClosureInClosureBug$2
at groovy.lang.MetaClass.getProperty(MetaClass.java:398)
at groovy.lang.Closure.getProperty(Closure.java:89)
at org.codehaus.groovy.runtime.Invoker.getProperty(Invoker.java:437)
at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:139)
at ClosureInClosureBug$2.doCall(D:\groovy\samples\ClosureInClosureBug.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:758)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:214)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:188)
at groovy.lang.Closure.invokeMethod(Closure.java:69)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:114)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:92)
at groovy.lang.Closure.call(Closure.java:145)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:256)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:758)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:236)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:127)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:92)
at ClosureInClosureBug$1.doCall(D:\groovy\samples\ClosureInClosureBug.groovy:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:758)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:214)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:188)
at groovy.lang.Closure.invokeMethod(Closure.java:69)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:114)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:92)
at groovy.lang.Closure.call(Closure.java:145)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:256)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:758)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:236)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:127)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:92)
at ClosureInClosureBug.testInvisibleVariable(D:\groovy\samples\ClosureInClosureBug.groovy:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:758)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:214)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:758)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:214)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:127)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:92)
at ClosureInClosureBug.invokeMethod(D:\groovy\samples\ClosureInClosureBug.groovy)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:114)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:92)
at ClosureInClosureBug.main(D:\groovy\samples\ClosureInClosureBug.groovy:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:758)
at groovy.lang.MetaClass.invokeStaticMethod(MetaClass.java:273)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:121)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:92)
at groovy.lang.GroovyShell.run(GroovyShell.java:171)
at groovy.lang.GroovyShell.main(GroovyShell.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.codehaus.classworlds.Launcher.launchStandard(Launcher.java:410)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:344)
at org.codehaus.classworlds.Launcher.main(Launcher.java:474)
Attachments
Attachments
Issue Links
- is duplicated by
-
GROOVY-214 nested closures seem to have a problem with variable passing
- Closed