[FIR] Add TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER check

This commit is contained in:
Andrey Zinovyev
2021-04-12 13:40:27 +03:00
committed by TeamCityServer
parent 470993ac07
commit 03215f4e0a
19 changed files with 75 additions and 95 deletions
+4 -4
View File
@@ -9,9 +9,9 @@ interface B {
}
interface G<X> {
val <X> boo: Double where X : A, X : B
val <A> bal: Double where A : B
val <Y> bas: Double where Y : B, <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>X<!> : B
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>X<!>> boo: Double where X : A, X : B
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>A<!>> bal: Double where A : B
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>Y<!>> bas: Double where Y : B, <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>X<!> : B
}
class C() : A(), B
@@ -66,4 +66,4 @@ val t1 = test2<A>(<!ARGUMENT_TYPE_MISMATCH!>A()<!>)
val t2 = test2<B>(<!ARGUMENT_TYPE_MISMATCH!>C()<!>)
val t3 = test2<C>(C())
val <T, B : T> x : Int = 0
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T<!>, <!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>B : T<!>> x : Int = 0
@@ -1 +1 @@
<!MUST_BE_INITIALIZED!>val <T : <!UNRESOLVED_REFERENCE!>KClass<T>.something<!>> abc<!>
<!MUST_BE_INITIALIZED!>val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T : <!UNRESOLVED_REFERENCE!>KClass<T>.something<!><!>> abc<!>
@@ -43,7 +43,7 @@ abstract class MyAbstractClass1 : MyTrait<Int>, MyAbstractClass<String>() {
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class MyIllegalGenericClass1<!><T> : MyTrait<T>, MyAbstractClass<T>() {}
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class MyIllegalGenericClass2<!><T, R>(r : R) : MyTrait<T>, MyAbstractClass<R>() {
override fun foo(r: R) = r
override val <T> pr : R = r
override val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T<!>> pr : R = r
}
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass1<!> : MyTrait<Int>, MyAbstractClass<String>() {}
abstract class MyLegalAbstractClass1 : MyTrait<Int>, MyAbstractClass<String>() {}
@@ -51,10 +51,10 @@ abstract class MyLegalAbstractClass1 : MyTrait<Int>, MyAbstractClass<String>() {
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass2<!><T>(t : T) : MyTrait<Int>, MyAbstractClass<Int>() {
fun foo(t: T) = t
fun bar(t: T) = t
val <R> pr : T = t
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>R<!>> pr : T = t
}
abstract class MyLegalAbstractClass2<T>(t : T) : MyTrait<Int>, MyAbstractClass<Int>() {
fun foo(t: T) = t
fun bar(t: T) = t
val <R> pr : T = t
}
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>R<!>> pr : T = t
}
@@ -1,7 +0,0 @@
fun <T: <!UPPER_BOUND_IS_EXTENSION_FUNCTION_TYPE!>Int.() -> String<!>> foo() {}
val <T: <!UPPER_BOUND_IS_EXTENSION_FUNCTION_TYPE!>Int.() -> String<!>> bar = fun (x: Int): String { return x.toString() }
class A<T> where T : <!UPPER_BOUND_IS_EXTENSION_FUNCTION_TYPE!>Double.(Int) -> Unit<!>
interface B<T, U : <!UPPER_BOUND_IS_EXTENSION_FUNCTION_TYPE!>T.() -> Unit<!>>
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun <T: <!UPPER_BOUND_IS_EXTENSION_FUNCTION_TYPE!>Int.() -> String<!>> foo() {}
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T: <!UPPER_BOUND_IS_EXTENSION_FUNCTION_TYPE!>Int.() -> String<!><!>> bar = fun (x: Int): String { return x.toString() }
@@ -1,7 +0,0 @@
fun <T: (Int) -> String> foo() {}
val <T: (kotlin.Int) -> kotlin.String> bar = fun (x: Int): String { return x.toString() }
class A<T, U, V> where T : () -> Unit, U : (Int) -> Double, V : (T, U) -> U
interface B<T, U : (T) -> Unit>
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun <T: (Int) -> String> foo() {}
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T: (kotlin.Int) -> kotlin.String<!>> bar = fun (x: Int): String { return x.toString() }
@@ -1,44 +0,0 @@
// !DIAGNOSTICS: -REDUNDANT_PROJECTION -CONFLICTING_PROJECTION
interface G
val <T> T.a: Int
get() = 3
val <T1, T2> Map<T1, T2>.b: String
get() = "asds"
val <T : G> G.c: Int get() = 5
val <T1, T2, T3> List<Map<T2, T3>>.d: Int get() = 6
val <T: Any> G.e: T?
get() = null
val <T> List<Map<Int, Map<String, T>>>.f: Int get() = 7
val <T> List<Map<Int, Map<String, out T>>>.g: Int get() = 7
val <T> List<Map<Int, Map<String, in T>>>.h: Int get() = 7
val <T> List<Map<T, Map<T, T>>>.i: Int get() = 7
var <T1, T2, T3, T4> p = 1
class C<T1, T2> {
val <E> T1.a: Int get() = 3
val <E> T2.b: Int get() = 3
val <E> E.c: Int get() = 3
val <E> Map<T1, T2>.d: Int get() = 3
val <E> Map<T1, E>.e: Int get() = 3
}
val <T : Enum<T>> T.z1: Int
get() = 4
interface D<T : Enum<T>>
val <X: D<*>> X.z2: Int
get() = 4
val <Y> D<*>.z3: Int
get() = 4
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -REDUNDANT_PROJECTION -CONFLICTING_PROJECTION
interface G
@@ -1,28 +0,0 @@
val <T : K, K> K.a: Int get() = 4
val <T, K> K.b: Int where T : K
get() = 4
val <T, K> K.c: Int where T : List<K>
get() = 4
val <T, K> K.d: Int where K : T
get() = 4
val <T, K> K.e: Int where K : List<T>
get() = 4
interface G
val <T> G.x1: Int where T : G
get() = 4
val <X, Y, Z> Z.x2: Int where X : Y, Z : Y
get() = 4
val <X, Y: Map<Z, X>, Z: List<List<Y>>> Z.x3: Int
get() = 5
val <X, Y: Map<X, List<Z>>, Z> Map<X, List<Y>>.x4: Int
get() = 5
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T : K<!>, K> K.a: Int get() = 4