K1: Deprecate incorrect callable references resolution behavior
^KT-54316 Related ^KT-54832 Fixed
This commit is contained in:
committed by
Space Team
parent
a3fd63fb1d
commit
2953e600ff
+1
-1
@@ -37,5 +37,5 @@ fun test() {
|
||||
val r7 = c::foo
|
||||
checkSubtype<() -> String>(r7)
|
||||
|
||||
C::bar
|
||||
<!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>C::bar<!>
|
||||
}
|
||||
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_DUMP
|
||||
|
||||
class Foo {
|
||||
companion object {
|
||||
fun bar() {}
|
||||
val baz = 42
|
||||
}
|
||||
}
|
||||
|
||||
val x1 = Foo::bar
|
||||
val x2 = Foo.Companion::bar
|
||||
val x3 = Foo::baz
|
||||
val x4 = Foo.Companion::baz
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
FILE: callableReferencesToCompanionMembers.fir.kt
|
||||
public final class Foo : R|kotlin/Any| {
|
||||
public constructor(): R|Foo| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
private constructor(): R|Foo.Companion| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun bar(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final val baz: R|kotlin/Int| = Int(42)
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final val x1: R|kotlin/reflect/KFunction0<kotlin/Unit>| = Q|Foo|::R|/Foo.Companion.bar|
|
||||
public get(): R|kotlin/reflect/KFunction0<kotlin/Unit>|
|
||||
public final val x2: R|kotlin/reflect/KFunction0<kotlin/Unit>| = Q|Foo.Companion|::R|/Foo.Companion.bar|
|
||||
public get(): R|kotlin/reflect/KFunction0<kotlin/Unit>|
|
||||
public final val x3: R|kotlin/reflect/KProperty0<kotlin/Int>| = Q|Foo|::R|/Foo.Companion.baz|
|
||||
public get(): R|kotlin/reflect/KProperty0<kotlin/Int>|
|
||||
public final val x4: R|kotlin/reflect/KProperty0<kotlin/Int>| = Q|Foo.Companion|::R|/Foo.Companion.baz|
|
||||
public get(): R|kotlin/reflect/KProperty0<kotlin/Int>|
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_DUMP
|
||||
|
||||
class Foo {
|
||||
companion object {
|
||||
fun bar() {}
|
||||
val baz = 42
|
||||
}
|
||||
}
|
||||
|
||||
val x1 = <!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>Foo::bar<!>
|
||||
val x2 = Foo.Companion::bar
|
||||
val x3 = <!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>Foo::baz<!>
|
||||
val x4 = Foo.Companion::baz
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
package
|
||||
|
||||
public val x1: kotlin.reflect.KFunction1<Foo, kotlin.Unit>
|
||||
public val x2: kotlin.reflect.KFunction0<kotlin.Unit>
|
||||
public val x3: kotlin.reflect.KProperty1<Foo, kotlin.Int>
|
||||
public val x4: kotlin.reflect.KProperty0<kotlin.Int>
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public companion object Companion {
|
||||
private constructor Companion()
|
||||
public final val baz: kotlin.Int = 42
|
||||
public final fun bar(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
// SKIP_TXT
|
||||
|
||||
class A {
|
||||
companion object {
|
||||
fun foo(): Int = 43
|
||||
val companionProp: Int = 44
|
||||
}
|
||||
|
||||
fun baz(): Int = 1
|
||||
val memberProp: Int = 2
|
||||
}
|
||||
|
||||
object Obj {
|
||||
fun foo(): Int = 43
|
||||
val objProp: Int = 44
|
||||
}
|
||||
|
||||
fun main() {
|
||||
A::foo.invoke(<!TOO_MANY_ARGUMENTS!>A()<!>)
|
||||
A::foo.invoke()
|
||||
val x = A::foo
|
||||
x.invoke(<!TOO_MANY_ARGUMENTS!>A()<!>)
|
||||
x.invoke()
|
||||
|
||||
A.Companion::foo.invoke()
|
||||
val x0 = A.Companion::foo
|
||||
x0.invoke()
|
||||
|
||||
bar(A::foo)
|
||||
|
||||
val y = id(A::foo)
|
||||
y.invoke()
|
||||
|
||||
A::baz.invoke(A())
|
||||
|
||||
val z = A::baz
|
||||
z.invoke(A())
|
||||
bam(A::baz)
|
||||
|
||||
Obj::foo.invoke()
|
||||
|
||||
val zObj = Obj::foo
|
||||
zObj.invoke()
|
||||
bar(Obj::foo)
|
||||
}
|
||||
|
||||
fun mainProp() {
|
||||
A::companionProp.invoke(<!TOO_MANY_ARGUMENTS!>A()<!>)
|
||||
A::companionProp.invoke()
|
||||
val x = A::companionProp
|
||||
x.invoke(<!TOO_MANY_ARGUMENTS!>A()<!>)
|
||||
x.invoke()
|
||||
|
||||
A.Companion::companionProp.invoke()
|
||||
val x0 = A.Companion::companionProp
|
||||
x0.invoke()
|
||||
|
||||
bar(A::companionProp)
|
||||
|
||||
val y = id(A::companionProp)
|
||||
y.invoke()
|
||||
|
||||
A::memberProp.invoke(A())
|
||||
|
||||
val z = A::memberProp
|
||||
z.invoke(A())
|
||||
bam(A::memberProp)
|
||||
|
||||
Obj::objProp.invoke()
|
||||
|
||||
val zObj = Obj::objProp
|
||||
zObj.invoke()
|
||||
bar(Obj::objProp)
|
||||
}
|
||||
|
||||
fun <E> id(e: E): E = e
|
||||
|
||||
fun bar(x: () -> Int) {}
|
||||
fun bam(x: A.() -> Int) {}
|
||||
Vendored
+79
@@ -0,0 +1,79 @@
|
||||
// SKIP_TXT
|
||||
|
||||
class A {
|
||||
companion object {
|
||||
fun foo(): Int = 43
|
||||
val companionProp: Int = 44
|
||||
}
|
||||
|
||||
fun baz(): Int = 1
|
||||
val memberProp: Int = 2
|
||||
}
|
||||
|
||||
object Obj {
|
||||
fun foo(): Int = 43
|
||||
val objProp: Int = 44
|
||||
}
|
||||
|
||||
fun main() {
|
||||
<!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>A::foo<!>.invoke(A())
|
||||
<!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>A::foo<!>.invoke<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
val x = <!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>A::foo<!>
|
||||
x.invoke(A())
|
||||
x.invoke<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
|
||||
A.Companion::foo.invoke()
|
||||
val x0 = A.Companion::foo
|
||||
x0.invoke()
|
||||
|
||||
bar(A::foo)
|
||||
|
||||
val y = id(A::foo)
|
||||
y.invoke()
|
||||
|
||||
A::baz.invoke(A())
|
||||
|
||||
val z = A::baz
|
||||
z.invoke(A())
|
||||
bam(A::baz)
|
||||
|
||||
Obj::foo.invoke()
|
||||
|
||||
val zObj = Obj::foo
|
||||
zObj.invoke()
|
||||
bar(Obj::foo)
|
||||
}
|
||||
|
||||
fun mainProp() {
|
||||
<!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>A::companionProp<!>.invoke(A())
|
||||
<!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>A::companionProp<!>.invoke<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
val x = <!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>A::companionProp<!>
|
||||
x.invoke(A())
|
||||
x.invoke<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
|
||||
A.Companion::companionProp.invoke()
|
||||
val x0 = A.Companion::companionProp
|
||||
x0.invoke()
|
||||
|
||||
bar(A::companionProp)
|
||||
|
||||
val y = id(A::companionProp)
|
||||
y.invoke()
|
||||
|
||||
A::memberProp.invoke(A())
|
||||
|
||||
val z = A::memberProp
|
||||
z.invoke(A())
|
||||
bam(A::memberProp)
|
||||
|
||||
Obj::objProp.invoke()
|
||||
|
||||
val zObj = Obj::objProp
|
||||
zObj.invoke()
|
||||
bar(Obj::objProp)
|
||||
}
|
||||
|
||||
fun <E> id(e: E): E = e
|
||||
|
||||
fun bar(x: () -> Int) {}
|
||||
fun bam(x: A.() -> Int) {}
|
||||
@@ -26,6 +26,6 @@ fun main() {
|
||||
// It must be OK
|
||||
val x18 = String?::hashCode <!USELESS_ELVIS!>?: ::foo<!>
|
||||
val x19 = String::hashCode <!USELESS_ELVIS!>?: ::foo<!>
|
||||
val x20 = String?::hashCode::hashCode
|
||||
val x21 = kotlin.String?::hashCode::hashCode
|
||||
val x20 = <!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>String?::hashCode<!>::hashCode
|
||||
val x21 = <!INCORRECT_CALLABLE_REFERENCE_RESOLUTION_FOR_COMPANION_LHS!>kotlin.String?::hashCode<!>::hashCode
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user