TargetType02.java revision 2890:e903011dafc7
185518Sjake/*
285518Sjake * @test /nodynamiccopyright/
385518Sjake * @bug 8003280 8029718 8078024
485518Sjake * @summary Add lambda tests
585518Sjake *  check overload resolution and target type inference w.r.t. generic methods
685518Sjake * Should always use lambda body structure to disambiguate overload resolution
785518Sjake * @author  Maurizio Cimadamore
885518Sjake * @compile/fail/ref=TargetType02.out -XDrawDiagnostics TargetType02.java
985518Sjake */
1085518Sjake
1185518Sjakepublic class TargetType02 {
1285518Sjake
1385518Sjake    interface S1<X extends Number> {
1485518Sjake        X m(Integer x);
1585518Sjake    }
1685518Sjake
1785518Sjake    interface S2<X extends String> {
1885518Sjake        abstract X m(Integer x);
1985518Sjake    }
2085518Sjake
2185518Sjake    static <Z extends Number> void call1(S1<Z> s) { }
2285518Sjake
2385518Sjake    static <Z extends String> void call2(S2<Z> s) { }
2485518Sjake
2585518Sjake    static <Z extends Number> void call3(S1<Z> s) { }
2685518Sjake    static <Z extends String> void call3(S2<Z> s) { }
2785518Sjake
2885518Sjake    static <Z extends Number> Z call4(S1<Z> s) { return null; }
2985518Sjake    static <Z extends String> Z call4(S2<Z> s) { return null; }
3085518Sjake
3185518Sjake    void test() {
3285518Sjake        call1(i -> { toString(); return i; });
3385518Sjake        call2(i -> { toString(); return i; });
3485518Sjake        call3(i -> { toString(); return i; });
3585518Sjake        call3(i -> {
3685518Sjake            toString();
3799116Sobrien            return call4(j -> {
3885518Sjake                return j;
3985518Sjake            });
4085518Sjake        });
4185518Sjake    }
4299116Sobrien}
4399116Sobrien