[FIR] Add diagnostic CONFLICTING_PROJECTION

This commit is contained in:
Nick
2020-08-14 15:22:09 +03:00
parent d40bca4143
commit 091e12c093
21 changed files with 419 additions and 12 deletions
@@ -4,11 +4,11 @@ class Inv<T>
class X
fun f1(p: In<in X>) {}
fun f2(p: In<out X>) {}
fun f2(p: <!CONFLICTING_PROJECTION!>In<out X><!>) {}
fun f3(p: In<X>) {}
fun f4(p: Out<out X>) {}
fun f5(p: Out<in X>) {}
fun f5(p: <!CONFLICTING_PROJECTION!>Out<in X><!>) {}
fun f6(p: Out<X>) {}
fun f6(p: Inv<X>) {}
@@ -51,7 +51,7 @@ val String.x1 get() = ""
fun <K> bar1(f: KFunction2<K, String, String>) {}
fun <K> bar2(f: KFunction2<out K, String, String>) {}
fun <K> bar2(f: <!CONFLICTING_PROJECTION!>KFunction2<out K, String, String><!>) {}
fun <K> bar3(f: Any?) {}
@@ -7,5 +7,5 @@ class In<in T>() {
fun test1(x: In<String>): Unit = x.f("1")
fun test2(x: In<in String>): Unit = x.f("1")
fun test3(x: In<out String>): Unit = x.f("1")
fun test3(x: <!CONFLICTING_PROJECTION!>In<out String><!>): Unit = x.f("1")
fun test4(x: In<*>): Unit = x.f("1")
@@ -6,8 +6,8 @@ interface Out<out T>
typealias InAlias<T> = In<T>
typealias OutAlias<T> = Out<T>
typealias TestOutForIn<T> = In<out T>
typealias TestInForOut<T> = Out<in T>
typealias TestOutForIn<T> = <!CONFLICTING_PROJECTION!>In<out T><!>
typealias TestInForOut<T> = <!CONFLICTING_PROJECTION!>Out<in T><!>
typealias TestOutForInWithinAlias<T> = InAlias<out T>
typealias TestInForOutWithinAlias<T> = OutAlias<in T>
@@ -1,6 +1,6 @@
// !DIAGNOSTICS: -UNUSED_TYPEALIAS_PARAMETER
typealias WithVariance<in X, out Y> = Int
typealias WithVariance<<!VARIANCE_ON_TYPE_PARAMETER_NOT_ALLOWED!>in X<!>, <!VARIANCE_ON_TYPE_PARAMETER_NOT_ALLOWED!>out Y<!>> = Int
typealias WithBounds1<T : T> = Int
typealias WithBounds2<X : Y, Y : X> = Int
@@ -6,11 +6,11 @@ class Inv<T>
typealias In1<T> = In<T>
typealias In2<T> = In<in T>
typealias In3<T> = In<out T>
typealias In3<T> = <!CONFLICTING_PROJECTION!>In<out T><!>
typealias In4<T> = In<*>
typealias Out1<T> = Out<T>
typealias Out2<T> = Out<in T>
typealias Out2<T> = <!CONFLICTING_PROJECTION!>Out<in T><!>
typealias Out3<T> = Out<out T>
typealias Out4<T> = Out<*>
@@ -35,7 +35,7 @@ interface Test<in I, out O, P> {
fun neOk6(i: In<In<O>>)
fun neOk7(i: Pair<In<I>, O>)
fun neOk8(i: Inv<out O>)
fun neOk9(i: In<out P>)
fun neOk9(i: <!CONFLICTING_PROJECTION!>In<out P><!>)
fun neOk10(i: Out<O>)
fun neOk11(i: Inv<in I>)
@@ -23,7 +23,7 @@ interface Test<in I, out O, P> {
var neOk7: Pair<In<I>, O>
var neOk8: Inv<in O>
var neOk9: Inv<in I>
var neOk10: In<out I>
var neOk10: <!CONFLICTING_PROJECTION!>In<out I><!>
var neOk11: I
var neOk12: In<O>
@@ -28,7 +28,7 @@ interface Test<in I, out O, P> {
fun neOk5(): Inv<O>
fun neOk6(): Pair<In<O>, I>
fun neOk7(): Inv<in O>
fun neOk8(): Out<in I>
fun neOk8(): <!CONFLICTING_PROJECTION!>Out<in I><!>
fun neOk10(): Inv<in O>
fun neOk11(): Inv<out I>