[ https://issues.apache.org/jira/browse/GROOVY-10312?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles updated GROOVY-10312: --------------------------------- Labels: traits (was: trait traits) > MissingMethodException in method with default parameter in trait - regression > in 3.0.9 > -------------------------------------------------------------------------------------- > > Key: GROOVY-10312 > URL: https://issues.apache.org/jira/browse/GROOVY-10312 > Project: Groovy > Issue Type: Bug > Affects Versions: 4.0.0-beta-1, 3.0.9 > Reporter: Marcin Zajaczkowski > Assignee: Eric Milles > Priority: Minor > Labels: traits > Fix For: 4.0.0-beta-2, 2.5.16, 3.0.10 > > > After switch from 3.0.8 to 3.0.9 Groovy throws at runtime > MissingMethodException for static method in a trait called from another > trait, but only if a given method has a default parameter. > A stripped down code to reproduce problem: > {code:java} > class StaticStaticInTraitProblem implements TLevel1 { > static void main(String[] args) { > staticMethodWithDefaultParameter() > } > } > trait TLevel1 extends TLevel2 { > static void staticMethodWithDefaultParameter(String params = "") { > //default param is required to make it fail at runtime > static2() //fails with MissingMethodException: No signature of > method: static foobar.TLevel1.static2() is applicable ... > } > } > trait TLevel2 { > static void static2() {} > }{code} > A stacktrace: > {code:java} > Exception in thread "main" groovy.lang.MissingMethodException: No signature > of method: static foobar.TLevel1.static2() is applicable for argument types: > () values: [] > Possible solutions: wait(), wait(long), split(groovy.lang.Closure), > wait(long, int), notify(), stream() > at > groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1584) > at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1570) > at > org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:1003) > at > org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:180) > at > foobar.TLevel1$Trait$Helper.$static_methodMissing(StaticStaticInTraitProblem2Spec.groovy) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:567) > at > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) > at > groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1582) > at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1570) > at > org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:50) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130) > at > foobar.TLevel1$Trait$Helper.staticMethodWithDefaultParameter(StaticStaticInTraitProblem2Spec.groovy:11) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:567) > at > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) > at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) > at > org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:44) > at > org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:100) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:55) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:217) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:240) > at > foobar.TLevel1$Trait$Helper.staticMethodWithDefaultParameter(StaticStaticInTraitProblem2Spec.groovy) > at > foobar.TLevel1$Trait$Helper$staticMethodWithDefaultParameter.call(Unknown > Source) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139) > at > foobar.StaticStaticInTraitProblem2Spec.staticMethodWithDefaultParameter(StaticStaticInTraitProblem2Spec.groovy) > at > foobar.StaticStaticInTraitProblem2Spec.main(StaticStaticInTraitProblem2Spec.groovy:5) > > {code} > Trying to minimize the original case, I reach similar error also with the > other construction: > {code:java} > class StaticInTraitProblem implements StaticTrait { > static void main(String[] args) { > staticMethodWithDefaultParameter() > } > } > trait StaticTrait { > public static final String CONSTANT = "" > static void staticMethodWithDefaultParameter(String params = "") { > //default param is required to make it fail at runtime > CONSTANT //Fails with: MissingMethodException: No signature of > method: static foobar.StaticTrait.foobar_StaticTrait__CONSTANT$get() is > applicable for argument types: () values: [] > } > } {code} > It worked fine with 3.0.8. -- This message was sent by Atlassian Jira (v8.20.10#820010)