You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Patric Bechtel (JIRA)" <ji...@apache.org> on 2018/08/09 10:22:00 UTC
[jira] [Updated] (GROOVY-8737) STC Method resolution fails if other
methods with more parameters exist
[ https://issues.apache.org/jira/browse/GROOVY-8737?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Patric Bechtel updated GROOVY-8737:
-----------------------------------
Description:
Given two classes as follows
{code:java}
@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" }
}
{code}
and
{code:java}
@groovy.transform.CompileStatic
public class B {
public static void main( String[] args ) {
println A.msg( 'hello', [ 'world' ] as Object[] )
}
}
{code}
will not compile with the error
{noformat}
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[] )
{noformat}
Though there's a perfect match for the called method, it tries to choose one of the longer signatures.
was:
Given two classes as follows
{code:java}
@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" }
}
{code}
and
{code:java}
@groovy.transform.CompileStatic
public class B {
public static void main( String[] args ) {
println A.msg( 'hello', [ 'world' ] as Object[] )
}
}
{code}
will not compile with the error
{noformat}
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[] )
{noformat}
Though there's a perfect match for the called method, it tries to choose one of the longer signatures.
> STC Method resolution fails if other methods with more parameters exist
> -----------------------------------------------------------------------
>
> Key: GROOVY-8737
> URL: https://issues.apache.org/jira/browse/GROOVY-8737
> Project: Groovy
> Issue Type: Bug
> Components: Static compilation
> Affects Versions: 2.4.15, 3.0.0-alpha-3, 2.5.1
> Environment: Ubuntu 18.04, Java 8u181
> Reporter: Patric Bechtel
> Priority: Major
>
> Given two classes as follows
> {code:java}
> @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" }
> }
> {code}
> and
> {code:java}
> @groovy.transform.CompileStatic
> public class B {
> public static void main( String[] args ) {
> println A.msg( 'hello', [ 'world' ] as Object[] )
> }
> }
> {code}
> will not compile with the error
> {noformat}
> 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[] )
> {noformat}
> Though there's a perfect match for the called method, it tries to choose one of the longer signatures.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)