| Blocks :   | |
| Blocks :   | |
| Relates :   | 
The new graph inference engine does not work properly when a nested generic call returns a wildcard parameterized type. For example, the following program (see JDK-8008200) fails to compile when graph inference is enabled.
interface Int {
    void main();
}
class MyInt implements Int {
    public void main() {
        System.out.println("Hello, world!");
    }
}
class BasicUnit {
    static <T extends Int> T factory(Class<T> c) throws Throwable {
        return c.newInstance();
    }
    public static void main(String[] args) throws Throwable {
        factory(Class.forName("MyInt").asSubclass(Int.class)).main();
    }
}
Output:
/Users/aurora/sandbox/testbase/test/java/lang/Class/asSubclass/BasicUnit.java:49: error: method factory in class BasicUnit cannot be applied to given types;
        factory(Class.forName("MyInt").asSubclass(Int.class)).main();
        ^
  required: Class<T>
  found: Class<CAP#1>
  reason: cannot infer type-variable(s) T,U
    (argument mismatch; Class<CAP#2> cannot be converted to Class<CAP#3>)
  where T,U are type-variables:
    T extends Int declared in method <T>factory(Class<T>)
    U extends Object declared in method <U>asSubclass(Class<U>)
  where CAP#1,CAP#2,CAP#3 are fresh type-variables:
    CAP#1 extends Int from capture of ? extends Int
    CAP#2 extends Int from capture of ? extends Int
    CAP#3 extends Int from capture of ? extends Int
1 error 
| 
 |