[FIR] Fix extension property reference resolution

On type with star projection
#KT-44372 Fixed
This commit is contained in:
Andrey Zinovyev
2021-05-25 18:10:38 +03:00
committed by teamcityserver
parent 2b4ea8e6e7
commit ddc9c1bd1b
9 changed files with 56 additions and 9 deletions
@@ -0,0 +1,23 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
import kotlin.reflect.KClass
fun box(): String {
val arr: Array<KClass<*>> = arrayOf(String::class, Number::class) as Array<KClass<*>>
val xs = arr.myMap { it.java }.toList()
val ys = arr.myMap(KClass<*>::java).toList()
if (xs != ys) return "fail1"
if (!arr.foo()) return "fail2"
return "OK"
}
public inline fun <A, B> Array<out A>.myMap(transform: (A) -> B): List<B> {
return mapTo(ArrayList<B>(size), transform)
}
fun Any?.foo(): Boolean {
val result = (this as Array<KClass<*>>).map(KClass<*>::java).toList()
val withLambda = (this as Array<KClass<*>>).map { it.java }.toList()
return result == withLambda
}
@@ -24,10 +24,10 @@ fun <T> Foo2<T>.setX(y: T): T {
fun Float.bar() {}
fun test1() {
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Unresolved reference: setX")!>Foo<*>::<!UNRESOLVED_REFERENCE!>setX<!><!>
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.reflect.KFunction2<Foo<*>, CapturedType(*), CapturedType(*)>")!>Foo<*>::setX<!>
val foo = Foo<Float>(1f)
fooSetRef.<!UNRESOLVED_REFERENCE!>invoke<!>(foo, 1)
fooSetRef.invoke(foo, <!ARGUMENT_TYPE_MISMATCH!>1<!>)
foo.x.bar()
}
@@ -42,10 +42,10 @@ fun test2() {
}
fun test3() {
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Unresolved reference: setX")!>Foo2<*>::<!UNRESOLVED_REFERENCE!>setX<!><!>
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.reflect.KFunction2<Foo2<*>, CapturedType(*), CapturedType(*)>")!>Foo2<*>::setX<!>
val foo = Foo2<Int>(1)
fooSetRef.<!UNRESOLVED_REFERENCE!>invoke<!>(foo, "")
fooSetRef.invoke(foo, <!ARGUMENT_TYPE_MISMATCH!>""<!>)
foo.x.<!INAPPLICABLE_CANDIDATE!>bar<!>()
}