[FIR] Add REPEATED_BOUND, CONFLICTING_UPPER_BOUNDS diagnostics
This commit is contained in:
@@ -48,7 +48,7 @@ class Bar<T : <!FINAL_UPPER_BOUND!>Foo<!>>
|
||||
class Buzz<T> where T : <!FINAL_UPPER_BOUND!>Bar<Int><!>, T : <!UNRESOLVED_REFERENCE!>nioho<!>
|
||||
|
||||
class X<T : <!FINAL_UPPER_BOUND!>Foo<!>>
|
||||
class Y<T> where T : <!FINAL_UPPER_BOUND!>Foo<!>, T : <!FINAL_UPPER_BOUND, ONLY_ONE_CLASS_BOUND_ALLOWED!>Bar<Foo><!>
|
||||
class Y<<!CONFLICTING_UPPER_BOUNDS!>T<!>> where T : <!FINAL_UPPER_BOUND!>Foo<!>, T : <!FINAL_UPPER_BOUND, ONLY_ONE_CLASS_BOUND_ALLOWED!>Bar<Foo><!>
|
||||
|
||||
fun <T> test2(t : T)
|
||||
where
|
||||
|
||||
@@ -6,18 +6,18 @@ interface B
|
||||
|
||||
interface D<T>
|
||||
|
||||
interface IncorrectF<T : D<A>> where T : D<B>
|
||||
interface IncorrectF<T : D<A>> where T : <!REPEATED_BOUND!>D<B><!>
|
||||
|
||||
interface CorrectF<T> where T : D<A>, T : D<B>
|
||||
interface CorrectF<T> where T : D<A>, T : <!REPEATED_BOUND!>D<B><!>
|
||||
|
||||
interface G<T>
|
||||
|
||||
interface IncorrectH<T : G<D<A>>> where T : G<D<T>>
|
||||
interface IncorrectH<T : G<D<A>>> where T : <!REPEATED_BOUND!>G<D<T>><!>
|
||||
|
||||
interface CorrectH<T> where T : G<D<A>>, T : G<D<B>>
|
||||
interface CorrectH<T> where T : G<D<A>>, T : <!REPEATED_BOUND!>G<D<B>><!>
|
||||
|
||||
interface incorrectJ<T: G<D<T>>> where T : G<D<T?>>
|
||||
interface incorrectJ<T: G<D<T>>> where T : <!REPEATED_BOUND!>G<D<T?>><!>
|
||||
|
||||
interface correctJ<T> where T : G<D<T>>, T : G<D<T?>>
|
||||
interface correctJ<T> where T : G<D<T>>, T : <!REPEATED_BOUND!>G<D<T?>><!>
|
||||
|
||||
fun <T> bar() where T : D<A>, T : D<B> {}
|
||||
fun <T> bar() where T : D<A>, T : <!REPEATED_BOUND!>D<B><!> {}
|
||||
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
interface I1
|
||||
interface I2
|
||||
open class C
|
||||
|
||||
interface A1<K, V> where V : K, V : K
|
||||
interface A2<K, V, W> where W : K, W : <!BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER!>V<!>
|
||||
interface A3<K, <!BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER!>V<!>> where V : I1, V : K, V : I2
|
||||
interface A4<<!BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER!>K<!>, V> where K : I1, K : I2, K : C, K : V, V : I2, V : I1
|
||||
|
||||
fun <K, V> f1() where V : K, V : K {}
|
||||
fun <K, V, W> f2() where W : K, W : <!BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER!>V<!> {
|
||||
fun <T> f3() where T : K, T : <!BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER!>V<!> {}
|
||||
fun <T> f4() where T : K, T : K {}
|
||||
}
|
||||
fun <K, V, <!BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER!>W<!>> f3() where W : K, W : V, W : Any {}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface I1
|
||||
interface I2
|
||||
open class C
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
open class C1
|
||||
open class C2
|
||||
open class C3 : C2()
|
||||
|
||||
class A1<T> where T : C1, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C2<!>
|
||||
class A2<T> where T : C1, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C2<!>, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C3<!>
|
||||
class A3<T> where T : C2, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C3<!>
|
||||
class A4<T> where T : C3, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C2<!>
|
||||
|
||||
fun <T> f1() where T : C1, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C2<!>, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C3<!> {}
|
||||
fun <T> f2() where T : C2, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C3<!> {}
|
||||
fun <T> f3() where T : C3, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C2<!> {}
|
||||
|
||||
enum class E1
|
||||
class A5<T> where T : C1, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>E1<!>
|
||||
|
||||
object O1
|
||||
class A6<T> where T : <!FINAL_UPPER_BOUND!>O1<!>, T : <!ONLY_ONE_CLASS_BOUND_ALLOWED!>C2<!>
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
open class C1
|
||||
open class C2
|
||||
open class C3 : C2()
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
interface I1
|
||||
|
||||
class A1<T> where T : I1, T : I1
|
||||
class A2<T> where T : I1, T : I1?
|
||||
class A3<K, V> where K : V, K : V
|
||||
|
||||
fun <T> f1() where T : I1, T : I1 {}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface I1
|
||||
|
||||
class A1<T> where T : I1, T : <!REPEATED_BOUND!>I1<!>
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
fun <A : Array<Any>> f1() {}
|
||||
fun <T, A : Array<out T>> f2() {}
|
||||
fun <S, T : S, A> f3() where A : Array<out S>, A : Array<out T> {}
|
||||
fun <S, T : S, A> f3() where A : Array<out S>, A : <!REPEATED_BOUND!>Array<out T><!> {}
|
||||
|
||||
fun <T : <!FINAL_UPPER_BOUND!>IntArray<!>> f4() {}
|
||||
|
||||
@@ -9,7 +9,7 @@ fun <T> f5() where T : Array<Any> {}
|
||||
val <T : Array<Any?>> T.v: String get() = ""
|
||||
|
||||
class C2<T, A : Array<out T>>
|
||||
interface C3<S, T : S, A> where A : Array<out S>, A : Array<out T>
|
||||
interface C3<S, T : S, A> where A : Array<out S>, A : <!REPEATED_BOUND!>Array<out T><!>
|
||||
|
||||
fun foo() {
|
||||
class C1<A : Array<Any>> {
|
||||
|
||||
Reference in New Issue
Block a user