/*
 * @test /nodynamiccopyright/
 * @bug 8003280
 * @summary Add lambda tests
 *  check that diamond inference is applied when using raw constructor reference qualifier
 * @compile/fail/ref=MethodReference43.out -XDrawDiagnostics MethodReference43.java
 */

public class MethodReference43 {

    interface SAM1 {
       Foo<?> m(String s);
    }

    interface SAM2 {
       Foo<?> m(Integer s);
    }

    interface SAM3 {
       Foo<?> m(Object o);
    }

    interface SAM4 {
       Foo<Number> m(Integer o);
    }

    static class Foo<X extends Number> {
        Foo(X x) { }
    }

    static void m1(SAM1 s) { }

    static void m2(SAM2 s) { }

    static void m3(SAM3 s) { }

    static void m4(SAM4 s) { }

    static void m5(SAM1 s) { }
    static void m5(SAM2 s) { }
    static void m5(SAM3 s) { }
    static void m5(SAM4 s) { }

    public static void main(String[] args) {
        m1(Foo::new);
        m2(Foo::new);
        m3(Foo::new);
        m4(Foo::new);
        m5(Foo::new);
    }
}
