1/*
2 * @test /nodynamiccopyright/
3 * @bug 8003280 8029718 8078024
4 * @summary Add lambda tests
5 *  check overload resolution and target type inference w.r.t. generic methods
6 * Should always use lambda body structure to disambiguate overload resolution
7 * @author  Maurizio Cimadamore
8 * @compile/fail/ref=TargetType02.out -XDrawDiagnostics TargetType02.java
9 */
10
11public class TargetType02 {
12
13    interface S1<X extends Number> {
14        X m(Integer x);
15    }
16
17    interface S2<X extends String> {
18        abstract X m(Integer x);
19    }
20
21    static <Z extends Number> void call1(S1<Z> s) { }
22
23    static <Z extends String> void call2(S2<Z> s) { }
24
25    static <Z extends Number> void call3(S1<Z> s) { }
26    static <Z extends String> void call3(S2<Z> s) { }
27
28    static <Z extends Number> Z call4(S1<Z> s) { return null; }
29    static <Z extends String> Z call4(S2<Z> s) { return null; }
30
31    void test() {
32        call1(i -> { toString(); return i; });
33        call2(i -> { toString(); return i; });
34        call3(i -> { toString(); return i; });
35        call3(i -> {
36            toString();
37            return call4(j -> {
38                return j;
39            });
40        });
41    }
42}
43