FIR: Fix callable references resolution with stub receivers

Use stubReceiver as a receiver for fake calls

See issues KT-43358 KT-43359 KT-43378
This commit is contained in:
Denis Zharkov
2020-11-15 13:15:15 +03:00
parent f97cc0b62d
commit d4c7d4fc7c
12 changed files with 27 additions and 29 deletions
@@ -36,12 +36,12 @@ class NoGenericTest {
fun B.extensionFun(): A = A()
fun test_1() {
val extensionValRef = <!UNRESOLVED_REFERENCE!>B::extensionVal<!>
val extensionFunRef = <!UNRESOLVED_REFERENCE!>B::extensionFun<!>
val extensionValRef = B::extensionVal
val extensionFunRef = B::extensionFun
}
fun test_2() {
val memberValRef = B::memberVal
val memberFunRef = B::memberFun
}
}
}
@@ -81,8 +81,8 @@ FILE: referenceToExtension.kt
}
public final fun test_1(): R|kotlin/Unit| {
lval extensionValRef: <ERROR TYPE REF: No result type for initializer> = Q|NoGenericTest.B|::<Unresolved name: extensionVal>#
lval extensionFunRef: <ERROR TYPE REF: No result type for initializer> = Q|NoGenericTest.B|::<Unresolved name: extensionFun>#
lval extensionValRef: R|kotlin/reflect/KProperty1<NoGenericTest.B, NoGenericTest.A>| = Q|NoGenericTest.B|::R|/NoGenericTest.extensionVal|
lval extensionFunRef: R|kotlin/reflect/KFunction1<NoGenericTest.B, NoGenericTest.A>| = Q|NoGenericTest.B|::R|/NoGenericTest.extensionFun|
}
public final fun test_2(): R|kotlin/Unit| {
@@ -34,9 +34,9 @@ fun main() {
<!AMBIGUITY!>foo3<!>(KotlinClass::baz)
// Type mismatch
<!INAPPLICABLE_CANDIDATE!>foo1<!>(<!UNRESOLVED_REFERENCE!>KotlinClass::bar<!>)
foo1(KotlinClass::bar)
foo2(KotlinClass::bar)
foo3(KotlinClass::bar)
<!AMBIGUITY!>foo3<!>(KotlinClass::bar)
foo1(KotlinClass2::bar)
// Type mismatch
@@ -50,13 +50,13 @@ FILE: main.kt
public final fun foo3(x: R|(kotlin/String) -> kotlin/Int|): R|kotlin/Unit| {
}
public final fun main(): R|kotlin/Unit| {
R|/foo1|(Q|KotlinClass|::R|/KotlinClass.Companion.baz|)
R|/foo1|(Q|KotlinClass|::R|/KotlinClass.baz|)
R|/foo2|(Q|KotlinClass|::R|/KotlinClass.baz|)
<Ambiguity: foo3, [/foo3, /foo3]>#(Q|KotlinClass|::R|/KotlinClass.baz|)
<Inapplicable(INAPPLICABLE): /foo1>#(Q|KotlinClass|::<Unresolved reference: bar>#)
R|/foo1|(Q|KotlinClass|::R|/JavaClass.bar|)
R|/foo2|(Q|KotlinClass|::R|/JavaClass.bar|)
R|/foo3|(Q|KotlinClass|::R|/JavaClass.bar|)
R|/foo1|(Q|KotlinClass2|::R|/KotlinClass2.Companion.bar|)
<Ambiguity: foo3, [/foo3, /foo3]>#(Q|KotlinClass|::R|/JavaClass.bar|)
R|/foo1|(Q|KotlinClass2|::R|/KotlinClass2.bar|)
<Inapplicable(INAPPLICABLE): /foo2>#(Q|KotlinClass2|::<Unresolved reference: bar>#)
R|/foo3|(Q|KotlinClass2|::R|/KotlinClass2.Companion.bar|)
R|/foo3|(Q|KotlinClass2|::R|/KotlinClass2.bar|)
}