[FIR] Add CYCLIC_GENERIC_UPPER_BOUND check

This commit is contained in:
Andrey Zinovyev
2021-04-12 18:53:09 +03:00
committed by TeamCityServer
parent 03215f4e0a
commit 2b8c22c08a
27 changed files with 144 additions and 35 deletions
@@ -1,7 +0,0 @@
fun <T : F?, F : T?> foo1() {}
fun <T : F?, F : E, E : F?> foo2() {}
fun <T, F> foo3() where T : F?, F : T {}
fun <T, F, E> foo4() where T : F?, F : E, E : F? {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T : F?<!>, <!CYCLIC_GENERIC_UPPER_BOUND!>F : T?<!>> foo1() {}
fun <T : F?, <!CYCLIC_GENERIC_UPPER_BOUND!>F : E<!>, <!CYCLIC_GENERIC_UPPER_BOUND!>E : F?<!>> foo2() {}
@@ -1,7 +0,0 @@
class A1<T : F?, F : T?>
class A2<T : F?, F : E, E : F?>
class A3<T, F> where T : F?, F : T?
class A4<T, F, E> where T : F?, F : E, E : F
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
class A1<T : <!CYCLIC_GENERIC_UPPER_BOUND!>F?<!>, F : <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>>
class A2<T : F?, F : <!CYCLIC_GENERIC_UPPER_BOUND!>E<!>, E : <!CYCLIC_GENERIC_UPPER_BOUND!>F?<!>>
@@ -7,7 +7,7 @@ interface Foo<F> {
fun <S> select(vararg args: S): S = TODO()
class Bar<B : B> : Foo<B> {
class Bar<B : <!CYCLIC_GENERIC_UPPER_BOUND!>B<!>> : Foo<B> {
val v = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>select(
getSum(),
42
@@ -1,3 +0,0 @@
// !DIAGNOSTICS: -MUST_BE_INITIALIZED -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
fun <T: T?> foo() {}
val <T: T?> prop
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -MUST_BE_INITIALIZED -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> foo() {}
val <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> prop
@@ -1 +0,0 @@
class MyClass<T: T?>
@@ -1 +1,2 @@
// FIR_IDENTICAL
class MyClass<T: <!CYCLIC_GENERIC_UPPER_BOUND!>T?<!>>
@@ -1 +0,0 @@
class MyClass<T: T>
@@ -1 +1,2 @@
// FIR_IDENTICAL
class MyClass<T: <!CYCLIC_GENERIC_UPPER_BOUND!>T<!>>
@@ -1,5 +0,0 @@
// !DIAGNOSTICS: -MUST_BE_INITIALIZED_OR_BE_ABSTRACT -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
class My {
fun <T: T?> foo() {}
val <T: T?> prop: T
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -MUST_BE_INITIALIZED_OR_BE_ABSTRACT -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
class My {
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> foo() {}
@@ -1,3 +0,0 @@
// !DIAGNOSTICS: -MUST_BE_INITIALIZED -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
fun <T: T> foo() {}
val <T: T?> prop: T
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -MUST_BE_INITIALIZED -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER
fun <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T<!>> foo() {}
val <<!CYCLIC_GENERIC_UPPER_BOUND!>T: T?<!>> prop: T
@@ -2,7 +2,7 @@
// !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
class Base<T : T> : HashSet<T>() {
class Base<T : <!CYCLIC_GENERIC_UPPER_BOUND!>T<!>> : HashSet<T>() {
fun foo() {
super.remove(<!ARGUMENT_TYPE_MISMATCH!>""<!>)
}