summaryrefslogtreecommitdiff
path: root/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibility.java
blob: 0f7aa7012061531474aaf79f0968cc7d732876c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
class ReturnTypeIncompatibility {

    interface I1<T extends Number> {
        T m(Integer x);
    }

    interface I2<L extends String> {
        L m(Integer x);
    }

    interface I3<K> {
        void m(Integer x);
    }

    static <P extends Number> void call(I1<P> i1) {
        i1.m(1);
    }

    static <P extends String> void call(I2<P> i2) {
        i2.m(2);
    }

    static <Q> void call(I3<Q> i3) {
        i3.m(3);
    }

    public static void main(String[] args) {
        call<error descr="Ambiguous method call: both 'ReturnTypeIncompatibility.call(I1<P>)' and 'ReturnTypeIncompatibility.call(I2<P>)' match">(i-> {return i;})</error>;
    }
}


class ReturnTypeCompatibility {

    interface I1<T extends Number> {
        T m(T x);
    }

    interface I2<L extends String> {
        L m(L x);
    }

    interface I3<K> {
        void m(K x);
    }

    static <P extends Number> void call(I1<P> i1) {
        i1.m(null);
    }

    static <P extends String> void call(I2<P> i2) {
        i2.m(null);
    }

    static <Q> void call(I3<Q> i3) {
        i3.m(null);
    }

    public static void main(String[] args) {
        call<error descr="Ambiguous method call: both 'ReturnTypeCompatibility.call(I1<Number>)' and 'ReturnTypeCompatibility.call(I2<String>)' match">(i-> {return i;})</error>;
    }
}

class ReturnTypeChecks1 {

    interface I<K extends Number, V extends Number> {
       V m(K k);
    }

    I<Integer, Integer> accepted = i -> { return i; };
    I<Double, Integer> rejected = <error descr="Incompatible return type Double in lambda expression">i -> { return i; }</error>;
}