Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.15, 3.0.0-alpha-3, 2.5.1
Description
Given two classes as follows
@groovy.transform.CompileStatic class A { public static String msg( String key, Object[] args ) { "key=$key, args=$args" } public static String msg( String key, Object[] args, Object[] parts ) { "key=$key, args=$args, parts=$parts" } public static String msg( String key, Object[] args, String[] names ) { "key=$key, args=$args, names=$names" } }
and
@groovy.transform.CompileStatic public class B { public static void main( String[] args ) { println A.msg( 'hello', [ 'world' ] as Object[] ) } }
will not compile with the error
B.groovy: 4: [Static type checking] - Reference to method is ambiguous. Cannot choose between [java.lang.String A#msg(java.lang.String, java.lang.Object[], java.lang.Object[]), java.lang.String A#msg(java.lang.String, java.lang.Object[], java.lang.String[])] @ line 4, column 15. println A.msg( 'hello', [ 'world' ] as Object[] )
Though there's a perfect match for the called method, it tries to choose one of the longer signatures.