10cd3fffeb86c4ba1e250e2a6e6a2baaad06b048
[idea/community.git] / java / java-tests / testData / codeInsight / daemonCodeAnalyzer / lambda / highlighting / ReturnTypeCompatibility.java
1 class ReturnTypeIncompatibility {
2
3     interface I1<T extends Number> {
4         T m(Integer x);
5     }
6
7     interface I2<L extends String> {
8         L m(Integer x);
9     }
10
11     interface I3<K> {
12         void m(Integer x);
13     }
14
15     static <P extends Number> void call(I1<P> i1) {
16         i1.m(1);
17     }
18
19     static <P extends String> void call(I2<P> i2) {
20         i2.m(2);
21     }
22
23     static <Q> void call(I3<Q> i3) {
24         i3.m(3);
25     }
26
27     public static void main(String[] args) {
28         call<error descr="Ambiguous method call: both 'ReturnTypeIncompatibility.call(I1<Integer>)' and 'ReturnTypeIncompatibility.call(I2<P>)' match">(i-> {return i;})</error>;
29     }
30 }
31
32
33 class ReturnTypeCompatibility {
34
35     interface I1<T extends Number> {
36         T m(T x);
37     }
38
39     interface I2<L extends String> {
40         L m(L x);
41     }
42
43     interface I3<K> {
44         void m(K x);
45     }
46
47     static <P extends Number> void call(I1<P> i1) {
48         i1.m(null);
49     }
50
51     static <P extends String> void call(I2<P> i2) {
52         i2.m(null);
53     }
54
55     static <Q> void call(I3<Q> i3) {
56         i3.m(null);
57     }
58
59     public static void main(String[] args) {
60         call<error descr="Ambiguous method call: both 'ReturnTypeCompatibility.call(I1<Number>)' and 'ReturnTypeCompatibility.call(I2<String>)' match">(i-> {return i;})</error>;
61     }
62 }
63
64 class ReturnTypeChecks1 {
65
66     interface I<K extends Number, V extends Number> {
67        V m(K k);
68     }
69
70     I<Integer, Integer> accepted = i -> { return i; };
71     I<Double, Integer> rejected = <error descr="Incompatible return type Double in lambda expression">i -> { return i; }</error>;
72 }