[FIR] Create snapshot of tower data context for postponed callable referneces
This fixes an issue if type of some implicit receiver was changed because of changed smartcast in outer scope ^KT-51228 Fixed
This commit is contained in:
+39
@@ -0,0 +1,39 @@
|
||||
FILE: smartcastOnImplicitReceiverOfCallableReference.kt
|
||||
public abstract interface A : R|kotlin/Any| {
|
||||
public abstract fun foo(): R|kotlin/Unit|
|
||||
|
||||
}
|
||||
public final fun R|kotlin/Any|.test_1(): R|kotlin/Unit| {
|
||||
when (this@R|/test_1|) {
|
||||
($subj$ is R|A|) -> {
|
||||
this@R|/test_1|.R|/A.foo|()
|
||||
::R|/A.foo|
|
||||
}
|
||||
else -> {
|
||||
throw R|java/lang/Exception.Exception|()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public final fun R|kotlin/Any|.test_2(): R|kotlin/Unit| {
|
||||
when (this@R|/test_2|) {
|
||||
($subj$ is R|A|) -> {
|
||||
this@R|/test_2|.R|/A.foo|()
|
||||
fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
|
||||
this@R|/test_2|.R|/A.foo|()
|
||||
}
|
||||
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public final fun R|kotlin/Any|.test_3(): R|kotlin/Unit| {
|
||||
when () {
|
||||
(this@R|/test_3| is R|A|) -> {
|
||||
lval f: R|kotlin/reflect/KFunction0<kotlin/Unit>| = ::R|/A.foo|
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
// ISSUE: KT-51228
|
||||
|
||||
interface A {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
fun Any.test_1() {
|
||||
when(this) {
|
||||
is A -> {
|
||||
foo() // ok
|
||||
::foo // UNRESOLVED_REFERENCE, should be ok
|
||||
}
|
||||
else -> throw Exception()
|
||||
}
|
||||
}
|
||||
|
||||
fun Any.test_2() {
|
||||
when(this) {
|
||||
is A -> {
|
||||
foo(); // ok
|
||||
{ foo() }
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
fun Any.test_3() {
|
||||
if (this is A) {
|
||||
val f = ::foo // ok
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user