Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8047797

Incorrect error: incompatible types: cannot infer type-variable(s) T#1,CAP#1,T#2

XMLWordPrintable

      Consider this code:
      -----
      import java.util.Collection;
      import java.util.List;

      public final class ModelUtils {

          public static void getNamespaceScope(Collection<? extends CharSequence> l) {
              getFirst(filter(l));
          }

          public static <T> T getFirst(Collection<? extends T> all) {
              return null;
          }

          public static <T extends CharSequence> T getFirst(Collection<T> allElements, String... elementName) {
              return null;
          }

          public static <T extends CharSequence> List<? extends T> filter(Collection<T> allElements) {
              return null;
          }

      }
      -----

      Compiling using langtools with fix for JDK-8044546 yields:
      -----
      $ javac ModelUtils.java
      ModelUtils.java:7: error: incompatible types: cannot infer type-variable(s) T#1,CAP#1,T#2
              getFirst(filter(l));
                      ^
          (argument mismatch; List<CAP#2> cannot be converted to Collection<? extends CAP#2>)
        where T#1,T#2 are type-variables:
          T#1 extends Object declared in method <T#1>getFirst(Collection<? extends T#1>)
          T#2 extends CharSequence declared in method <T#2>filter(Collection<T#2>)
        where CAP#1,CAP#2,CAP#3 are fresh type-variables:
          CAP#1 extends T#2 from capture of ? extends T#2
          CAP#2 extends CAP#3 from capture of ? extends T#2
          CAP#3 extends CharSequence from capture of ? extends CharSequence
      1 error
      -----

      Compiling using langtools before the fix for JDK-8044546 passes:

            vromero Vicente Arturo Romero Zaldivar
            jlahoda Jan Lahoda
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: