Fix NPE on equals/hashCode for callable references without kotlin-reflect
#KT-11316 Fixed #KT-15847 Fixed
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
// WITH_REFLECT
|
||||
// TODO: replace with WITH_RUNTIME once KT-11316 is fixed
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
|
||||
Vendored
+9
@@ -11,6 +11,9 @@ class M {
|
||||
val bar = 1
|
||||
}
|
||||
|
||||
fun topLevelFun() {}
|
||||
val topLevelProp = ""
|
||||
|
||||
fun checkEquals(x: KCallable<*>, y: KCallable<*>) {
|
||||
assertEquals(x, y)
|
||||
assertEquals(y, x)
|
||||
@@ -26,9 +29,15 @@ fun box(): String {
|
||||
checkEquals(M::bar, M::bar)
|
||||
checkEquals(::M, ::M)
|
||||
|
||||
checkEquals(::topLevelFun, ::topLevelFun)
|
||||
checkEquals(::topLevelProp, ::topLevelProp)
|
||||
|
||||
checkToString(M::foo, "function foo")
|
||||
checkToString(M::bar, "property bar")
|
||||
checkToString(::M, "constructor")
|
||||
|
||||
checkToString(::topLevelFun, "function topLevelFun")
|
||||
checkToString(::topLevelProp, "property topLevelProp")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.reflect.KProperty
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
object Delegate {
|
||||
lateinit var prop: KProperty<*>
|
||||
|
||||
operator fun provideDelegate(thiz: Any?, p: KProperty<*>): Delegate {
|
||||
prop = p
|
||||
return this
|
||||
}
|
||||
|
||||
operator fun getValue(x: Any?, p: KProperty<*>) {
|
||||
assertEquals(prop, p)
|
||||
assertEquals(p, prop)
|
||||
assertEquals(p.hashCode(), prop.hashCode())
|
||||
assertEquals("property x (Kotlin reflection is not available)", p.toString())
|
||||
}
|
||||
}
|
||||
|
||||
val x: Unit by Delegate
|
||||
|
||||
fun box(): String {
|
||||
x
|
||||
return "OK"
|
||||
}
|
||||
+3
@@ -1,8 +1,11 @@
|
||||
@kotlin.Metadata
|
||||
public final class CallableReferencesKt {
|
||||
private final static @org.jetbrains.annotations.NotNull field topLevelProp: java.lang.String
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method checkEquals(@org.jetbrains.annotations.NotNull p0: kotlin.reflect.KCallable, @org.jetbrains.annotations.NotNull p1: kotlin.reflect.KCallable): void
|
||||
public final static method checkToString(@org.jetbrains.annotations.NotNull p0: kotlin.reflect.KCallable, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
|
||||
public final static @org.jetbrains.annotations.NotNull method getTopLevelProp(): java.lang.String
|
||||
public final static method topLevelFun(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
@kotlin.Metadata
|
||||
public final class Delegate {
|
||||
public final static field INSTANCE: Delegate
|
||||
public static @org.jetbrains.annotations.NotNull field prop: kotlin.reflect.KProperty
|
||||
private method <init>(): void
|
||||
public final @org.jetbrains.annotations.NotNull method getProp(): kotlin.reflect.KProperty
|
||||
public final method getValue(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.reflect.KProperty): void
|
||||
public final @org.jetbrains.annotations.NotNull method provideDelegate(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.reflect.KProperty): Delegate
|
||||
public final method setProp(@org.jetbrains.annotations.NotNull p0: kotlin.reflect.KProperty): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class DelegatedPropertyKt {
|
||||
private synthetic final static field $$delegatedProperties: kotlin.reflect.KProperty[]
|
||||
private final static @org.jetbrains.annotations.NotNull field x$delegate: Delegate
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static @org.jetbrains.annotations.NotNull method getX(): kotlin.Unit
|
||||
}
|
||||
Reference in New Issue
Block a user