[ 
https://issues.apache.org/jira/browse/GROOVY-2913?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul King closed GROOVY-2913.
-----------------------------

> Closure and binding with static finals from extended classes leads to an 
> exception.
> -----------------------------------------------------------------------------------
>
>                 Key: GROOVY-2913
>                 URL: https://issues.apache.org/jira/browse/GROOVY-2913
>             Project: Groovy
>          Issue Type: Sub-task
>          Components: groovy-runtime
>    Affects Versions: 1.5.6, 1.6-beta-1
>            Reporter: Hans Dockter
>            Priority: Major
>
> The following code produces an error
> {code}
> static final String A = 'a'
>     void testA() {
>         def closure = {
>             println A
>         }
>         closure()
>     }
>     void testC() {
>         println(A)
>         def closure = {
>             println AbstractClass.A
>         }
>         closure()
>   }
> class ConcreteClassTest extends AbstractClassTest {
>     static final String B = 'b'
>     void testB() {
>         println(B)
>         def closure = {
>             println B
>         }
>         closure()
>     }
> }
> {code}
> If I run ConcreteClassTest, testB and testC works fine but testA throws an 
> exception.
> The stacktrace is:
> {noformat}
> groovy.lang.MissingPropertyException: No such property: A for class: 
> ConcreteClass
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:49)
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:59)
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:169)
>       at AbstractClass.getProperty(AbstractClass.groovy)
>       at 
> org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:172)
>       at groovy.lang.Closure.getPropertyTryThese(Closure.java:200)
>       at groovy.lang.Closure.getPropertyOwnerFirst(Closure.java:216)
>       at groovy.lang.Closure.getProperty(Closure.java:186)
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getGroovyObjectProperty(ScriptBytecodeAdapter.java:532)
>       at AbstractClass$_testA_closure1.doCall(AbstractClass.groovy:28)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:86)
>       at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:226)
>       at 
> org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:248)
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptBytecodeAdapter.java:77)
>       at AbstractClass$_testA_closure1.doCall(AbstractClass.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 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:86)
>       at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:226)
>       at 
> org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:248)
>       at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:754)
>       at 
> org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:779)
>       at 
> org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:759)
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:167)
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeClosure(ScriptBytecodeAdapter.java:602)
>       at AbstractClass.testA(AbstractClass.groovy:30)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at 
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to