[ https://issues.apache.org/jira/browse/GROOVY-8587?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Cottrill updated GROOVY-8587: -------------------------------------- Description: Consider the following: trait A { void doSomething() { println "A" } } trait B extends A {} class C implements B { @Override void doSomething() { B.super.doSomething() } static void main(String[] args) { new C().doSomething() } } Although this compiles fine, a MissingMethodException is thrown at runtime: {{Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: static B.doSomething() is applicable for argument types: (C) values: [C@12f41634]}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1518)}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1504)}} \{{ at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:921)}} \{{ at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:181)}} \{{ at B$Trait$Helper.$static_methodMissing(Bug.groovy)}} \{{ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}} \{{ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}} \{{ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}} \{{ at java.lang.reflect.Method.invoke(Method.java:498)}} \{{ at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1516)}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1504)}} \{{ at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:52)}} \{{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)}} \{{ at C.doSomething(Bug.groovy:12)}} \{{ at A$doSomething.call(Unknown Source)}} \{{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)}} \{{ at C.main(Bug.groovy:16)}} \{{ }} was: Consider the following: {{trait A {}} {{ void doSomething() {}} {{ println "A"}} {{ }}} {{}}} {{trait B extends A {}}} {{class C implements B {}} {{ @Override}} {{ void doSomething() {}} {{ B.super.doSomething()}} {{ }}} {{ static void main(String[] args) {}} {{ new C().doSomething()}} {{ }}} {{}}} Although this compiles fine, a MissingMethodException is thrown at runtime: {{Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: static B.doSomething() is applicable for argument types: (C) values: [C@12f41634]}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1518)}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1504)}} \{{ at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:921)}} \{{ at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:181)}} \{{ at B$Trait$Helper.$static_methodMissing(Bug.groovy)}} \{{ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}} \{{ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}} \{{ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}} \{{ at java.lang.reflect.Method.invoke(Method.java:498)}} \{{ at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1516)}} \{{ at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1504)}} \{{ at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:52)}} \{{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)}} \{{ at C.doSomething(Bug.groovy:12)}} \{{ at A$doSomething.call(Unknown Source)}} \{{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)}} \{{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)}} \{{ at C.main(Bug.groovy:16)}} \{{ }} > Calling super in an overridden method results in MissingMethodException when > method indirectly inherited from trait > ------------------------------------------------------------------------------------------------------------------- > > Key: GROOVY-8587 > URL: https://issues.apache.org/jira/browse/GROOVY-8587 > Project: Groovy > Issue Type: Bug > Affects Versions: 2.4.15 > Reporter: Jonathan Cottrill > Priority: Major > > Consider the following: > trait A { > void doSomething() { > println "A" > } > } > trait B extends A {} > class C implements B { > @Override > void doSomething() { > B.super.doSomething() > } > static void main(String[] args) { > new C().doSomething() > } > } > Although this compiles fine, a MissingMethodException is thrown at runtime: > {{Exception in thread "main" groovy.lang.MissingMethodException: No signature > of method: static B.doSomething() is applicable for argument types: (C) > values: [C@12f41634]}} > \{{ at > groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1518)}} > \{{ at > groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1504)}} > \{{ at > org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:921)}} > \{{ at > org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:181)}} > \{{ at B$Trait$Helper.$static_methodMissing(Bug.groovy)}} > \{{ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}} > \{{ at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}} > \{{ at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}} > \{{ at java.lang.reflect.Method.invoke(Method.java:498)}} > \{{ at > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)}} > \{{ at > groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1516)}} > \{{ at > groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1504)}} > \{{ at > org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:52)}} > \{{ at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)}} > \{{ at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)}} > \{{ at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)}} > \{{ at C.doSomething(Bug.groovy:12)}} > \{{ at A$doSomething.call(Unknown Source)}} > \{{ at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)}} > \{{ at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)}} > \{{ at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)}} > \{{ at C.main(Bug.groovy:16)}} > \{{ }} > -- This message was sent by Atlassian JIRA (v7.6.3#76005)