Fix NPE on equals/hashCode for callable references without kotlin-reflect

#KT-11316 Fixed
 #KT-15847 Fixed
This commit is contained in:
Alexander Udalov
2017-02-03 01:45:24 +03:00
parent 0db60bf6cb
commit b784680fe2
13 changed files with 143 additions and 2 deletions
@@ -1,5 +1,4 @@
// WITH_REFLECT
// TODO: replace with WITH_RUNTIME once KT-11316 is fixed
import kotlin.reflect.*
@@ -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"
}
@@ -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"
}
@@ -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
@@ -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
}