[ https://issues.apache.org/jira/browse/GROOVY-8660?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17364325#comment-17364325 ]
Eric Milles commented on GROOVY-8660: ------------------------------------- I only found out about this a couple weeks ago. As best as I can gather, the method selection (in MetaClassImpl) will translate "foo()" to "foo(null)" if there is only one method "foo" for the receiver type and the method has one non-primitive parameter. This extends to category methods, so a static category method will apply to "foo()" if is has one self parameter and one additional non-primitive parameter. In your "Both" case, the one method criterion is not met. I'm not sure why this exists and I think I have seen some discussion of removing it in MOP 2.0. But I think that effort is largely stalled. > Unexpected MethodSelectionException with implicit null argument > --------------------------------------------------------------- > > Key: GROOVY-8660 > URL: https://issues.apache.org/jira/browse/GROOVY-8660 > Project: Groovy > Issue Type: Bug > Affects Versions: 3.0.0-alpha-2, 2.4.15, 2.5.0 > Reporter: Daniil Ovchinnikov > Priority: Major > > {code:groovy} > class OnlySingle { > def foo(a) { "single param: $a" } > } > println new OnlySingle().foo() > // as expected: 'single param: null' > class OnlyVararg { > def foo(a, ... b) { "vararg param: $a, $b" } > } > println new OnlyVararg().foo() > // as expected: 'MME: No signature of method: OnlyVararg.foo() is applicable > for argument types: () values: []' > class Both { > def foo(a) { "single param: $a" } > def foo(a, ... b) { "vararg param: $a, $b" } > } > println new Both().foo() > // unexpected: > // MethodSelectionException: Could not find which method foo() to invoke from > this list: > // public java.lang.Object Both#foo(java.lang.Object) > // public transient java.lang.Object Both#foo(java.lang.Object, > [Ljava.lang.Object;) > {code} > If the exception is expected then {{OnlyVararg}} case should work too. > If the exception is unexpected then {{Both#foo(Object)}} should be selected. -- This message was sent by Atlassian Jira (v8.3.4#803005)