You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2023/04/15 17:50:00 UTC

[jira] [Updated] (GROOVY-10362) STC reports an unexpected method ambiguity

     [ https://issues.apache.org/jira/browse/GROOVY-10362?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Eric Milles updated GROOVY-10362:
---------------------------------
    Priority: Minor  (was: Major)

> STC reports an unexpected method ambiguity
> ------------------------------------------
>
>                 Key: GROOVY-10362
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10362
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static Type Checker
>            Reporter: Thodoris Sotiropoulos
>            Assignee: Eric Milles
>            Priority: Minor
>
> This is an extremely complicated test case that it may be quite rare to appear in practice.
> I have the following piece of code
> {code:java}
> interface I<W, Y, B extends W> {
>   Y m(Y x, B y);
> }
> interface I2<S extends Boolean, M> extends I<S, S, S> {}
> interface I3<J> extends I2<Boolean, J> {}
> interface I4<X extends Number> extends I3<X> {}
> class B implements I4<Number> {
>   public Boolean m(Boolean x, Boolean y) {
>     return false;
>   }
> }
> abstract class C<T1 extends Integer, T2 extends T1> extends B {}
> public class Test {
>   void test() {
>     B x = bar();
>     x.m(true, false);
>   }
>   C<Integer, Integer> bar() {
>     return null;
>   }
> }
> {code}
> h3. Actual behaviour
> {code}
> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
> test.groovy: 24: [Static type checking] - Reference to method is ambiguous. Cannot choose between [java.lang.Boolean B#m(java.lang.Boolean, java.lang.Boolean), Y I#m(Y, B)]
>  @ line 24, column 5.
>        x.m(true, false);
>        ^
> 1 error
> {code}
> h3. Expected behaviour
> Compile successfully
> NOTE: To trigger the bug, a four-leveled inheritance chain is required. Also, class `D` needs to be abstract. If you change one of those, the code compiles successfully.
> Tested against master.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)