[FIR] Prohibit calling functions with dynamic receiver over non-dynamics

^KT-63071 Fixed
This commit is contained in:
Nikolay Lunyak
2023-11-28 12:08:05 +02:00
committed by Space Team
parent c69c34ff8b
commit 875e2b0cd6
16 changed files with 61 additions and 11 deletions
@@ -10,5 +10,5 @@ fun test() {
fun <T> dynamic(body: dynamic.() -> T): T {
val topLevel = null
return topLevel.body()
return topLevel.<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>body<!>()
}
@@ -21,8 +21,8 @@ fun test(d: dynamic, a: Any?) {
println(item)
}
a.<!UNRESOLVED_REFERENCE!>onDynamicFun<!>()
a.<!UNRESOLVED_REFERENCE!>onDynamicProperty<!>
a.<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamicFun<!>()
a.<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamicProperty<!>
}
fun <T> eatT(t: T) {}
@@ -24,7 +24,7 @@ fun test(d: dynamic) {
(d as String).onStringVal
(d as Any).onAnyVal
(d as Any?).onNullableAnyVal
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVal<!>
(d as Any).<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamicVal<!>
}
fun testReassignmentWithSafeCall(d: dynamic) {
@@ -35,7 +35,7 @@ fun testReassignmentWithStaticCalls(d: dynamic) {
(d as String).<!VAL_REASSIGNMENT!>onStringVal<!> = 1
(d as Any).<!VAL_REASSIGNMENT!>onAnyVal<!> = 1
(d as Any?).<!VAL_REASSIGNMENT!>onNullableAnyVal<!> = 1
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVal<!> = 1
(d as Any).<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC, VAL_REASSIGNMENT!>onDynamicVal<!> = 1
}
val Any.onAnyVal: Int get() = 1
@@ -22,17 +22,17 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onDynamicVar<!> = 1
d?.<!UNRESOLVED_REFERENCE!>onDynamicVar<!> = 1
d?.<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamicVar<!> = 1
(d as String).onStringVar
(d as Any).onAnyVar
(d as Any?).onNullableAnyVar
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVar<!>
(d as Any).<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamicVar<!>
(d as String).onStringVar = 1
(d as Any).onAnyVar = 1
(d as Any?).onNullableAnyVar = 1
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVar<!> = 1
(d as Any).<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamicVar<!> = 1
}
var Any.onAnyVar: Int
@@ -14,12 +14,12 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onString<!>()
d.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
d?.<!UNRESOLVED_REFERENCE!>onDynamic<!>()
d?.<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamic<!>()
(d as String).onString()
(d as Any).onAny()
(d as Any?).onNullableAny()
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamic<!>()
(d as Any).<!DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC!>onDynamic<!>()
}
fun Any.onAny() {}