FIR checker: report non-typed LHS of callable references
This commit is contained in:
committed by
Mikhail Glukhikh
parent
329be4f906
commit
33c5b49632
@@ -28,8 +28,8 @@ class Test1<T>()
|
||||
{
|
||||
|
||||
fun test(t : T) {
|
||||
<!OTHER_ERROR!>T<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
<!OTHER_ERROR!>T<!>.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||
t.foo()
|
||||
t.bar()
|
||||
}
|
||||
@@ -56,8 +56,8 @@ fun <T> test2(t : T)
|
||||
T : B,
|
||||
B : T
|
||||
{
|
||||
<!OTHER_ERROR!>T<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
<!OTHER_ERROR!>T<!>.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||
t.foo()
|
||||
t.bar()
|
||||
}
|
||||
@@ -66,4 +66,4 @@ val t1 = <!INAPPLICABLE_CANDIDATE!>test2<!><A>(A())
|
||||
val t2 = <!INAPPLICABLE_CANDIDATE!>test2<!><B>(C())
|
||||
val t3 = test2<C>(C())
|
||||
|
||||
val <T, B : T> x : Int = 0
|
||||
val <T, B : T> x : Int = 0
|
||||
|
||||
+6
-6
@@ -1,19 +1,19 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
|
||||
class A<T, U : Any> {
|
||||
fun foo() = <!OTHER_ERROR!>T<!>::toString
|
||||
fun foo() = <!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>T::toString<!>
|
||||
|
||||
fun bar() = <!OTHER_ERROR!>U<!>::toString
|
||||
fun bar() = <!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>U::toString<!>
|
||||
|
||||
fun baz() {
|
||||
take(<!OTHER_ERROR!>T<!>::toString)
|
||||
take(<!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>T::toString<!>)
|
||||
|
||||
take(<!OTHER_ERROR!>U<!>::toString)
|
||||
take(<!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>U::toString<!>)
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> foo() = <!OTHER_ERROR!>T<!>::toString
|
||||
fun <T> foo() = <!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>T::toString<!>
|
||||
|
||||
fun <U : Any> bar() = <!OTHER_ERROR!>U<!>::toString
|
||||
fun <U : Any> bar() = <!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>U::toString<!>
|
||||
|
||||
fun take(arg: Any) {}
|
||||
|
||||
@@ -9,8 +9,8 @@ val l1 = <!NULLABLE_TYPE_IN_CLASS_LITERAL_LHS!>List<String>?::class<!>
|
||||
val l2 = <!NULLABLE_TYPE_IN_CLASS_LITERAL_LHS!>List?::class<!>
|
||||
|
||||
fun <T : Any> foo() {
|
||||
val t1 = <!OTHER_ERROR!>T<!>::class
|
||||
val t2 = <!OTHER_ERROR!>T<!>?::class
|
||||
val t1 = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
val t2 = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>?::class
|
||||
}
|
||||
|
||||
inline fun <reified T : Any> bar() {
|
||||
|
||||
+11
-11
@@ -1,23 +1,23 @@
|
||||
// !DIAGNOSTICS: -TYPE_PARAMETER_AS_REIFIED -TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
|
||||
fun <T> test1() = <!OTHER_ERROR!>T<!>::class
|
||||
fun <T : Any> test2() = <!OTHER_ERROR!>T<!>::class
|
||||
fun <T> test1() = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
fun <T : Any> test2() = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
|
||||
val <T> test3 = <!OTHER_ERROR!>T<!>::class
|
||||
val <T> test4 get() = <!OTHER_ERROR!>T<!>::class
|
||||
val <T> test3 = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
val <T> test4 get() = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
|
||||
fun <T> test5() = listOf(<!OTHER_ERROR!>T<!>::class)
|
||||
fun <T> test5() = listOf(T::class)
|
||||
|
||||
fun <T> test6(): kotlin.reflect.KClass<T> = <!OTHER_ERROR!>T<!>::class
|
||||
fun <T> test7(): kotlin.reflect.KClass<*> = <!OTHER_ERROR!>T<!>::class
|
||||
fun <T> test6(): kotlin.reflect.KClass<T> = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
fun <T> test7(): kotlin.reflect.KClass<*> = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
fun test8() = <!NULLABLE_TYPE_IN_CLASS_LITERAL_LHS!>String?::class<!>
|
||||
|
||||
fun <T> listOf(e: T): List<T> = null!!
|
||||
|
||||
fun <L> locals() {
|
||||
fun <T> test1() = <!OTHER_ERROR!>T<!>::class
|
||||
fun <T : Any> test2() = <!OTHER_ERROR!>T<!>::class
|
||||
fun <T> test1() = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
fun <T : Any> test2() = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>::class
|
||||
|
||||
val test3 = <!OTHER_ERROR!>L<!>::class
|
||||
fun test4() = <!OTHER_ERROR!>L<!>::class
|
||||
val test3 = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>L<!>::class
|
||||
fun test4() = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>L<!>::class
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_EXPRESSION
|
||||
|
||||
inline fun <reified T> foo() {
|
||||
<!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>T::toString<!>
|
||||
}
|
||||
|
||||
inline fun <reified T> f(): T = throw UnsupportedOperationException()
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_EXPRESSION
|
||||
|
||||
inline fun <reified T> foo() {
|
||||
<!CALLABLE_REFERENCE_LHS_NOT_A_CLASS!>T::<!UNRESOLVED_REFERENCE!>toString<!><!>
|
||||
}
|
||||
|
||||
inline fun <reified T> f(): T = throw UnsupportedOperationException()
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package
|
||||
|
||||
public inline fun </*0*/ reified T> f(): T
|
||||
public inline fun </*0*/ reified T> foo(): kotlin.Unit
|
||||
public fun </*0*/ T> id(/*0*/ p: T): T
|
||||
public fun </*0*/ A> main(): kotlin.Unit
|
||||
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
package bar
|
||||
|
||||
class S<T> {
|
||||
fun foo() {
|
||||
<!OTHER_ERROR!>T<!>
|
||||
<!OTHER_ERROR!>T<!>.<!UNRESOLVED_REFERENCE!>create<!>()
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
package bar
|
||||
|
||||
class S<T> {
|
||||
|
||||
+1
-1
@@ -14,6 +14,6 @@ fun test() {
|
||||
}
|
||||
|
||||
fun <T> bar() {
|
||||
val typeParameter_as_val = <!OTHER_ERROR!>T<!>
|
||||
val typeParameter_as_val = <!TYPE_PARAMETER_IS_NOT_AN_EXPRESSION!>T<!>
|
||||
val typeParameter_as_fun = <!UNRESOLVED_REFERENCE!>T<!>()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user