Provide equals/hashCode/toString for KParameter implementation

Two KParameter instances are equal iff their backing descriptors are equal and
their callables are equal
This commit is contained in:
Alexander Udalov
2015-08-24 17:33:36 +03:00
parent d4825cf4f0
commit d36ef90dd6
5 changed files with 97 additions and 0 deletions
@@ -0,0 +1,26 @@
import kotlin.test.*
class A {
fun foo(s: String, x: Int) {}
fun bar(x: Int) {}
val baz = 42
}
fun box(): String {
// Dispatch receiver parameters of different callables are not equal
assertNotEquals(A::foo.parameters[0], A::bar.parameters[0])
assertNotEquals(A::foo.parameters[0], A::baz.parameters[0])
assertNotEquals(A::foo.parameters[1], A::bar.parameters[1])
assertNotEquals(A::foo.parameters[1], A::foo.parameters[2])
assertNotEquals(A::bar.parameters[1], A::foo.parameters[2])
assertEquals(A::foo.parameters[0], A::foo.parameters[0])
assertEquals(A::foo.parameters[0].hashCode(), A::foo.parameters[0].hashCode())
assertEquals(A::foo.parameters[1], A::foo.parameters[1])
assertEquals(A::foo.parameters[1].hashCode(), A::foo.parameters[1].hashCode())
assertEquals(A::bar.parameters[0], A::bar.parameters[0])
assertEquals(A::bar.parameters[0].hashCode(), A::bar.parameters[0].hashCode())
return "OK"
}
@@ -0,0 +1,28 @@
import kotlin.test.*
fun Int.foo(s: String) {}
class A {
fun bar() {}
}
fun baz(name: String) {}
fun box(): String {
assertEquals(
listOf("extension receiver of ${Int::foo}", "parameter #1 s of ${Int::foo}"),
Int::foo.parameters.map(Any::toString)
)
assertEquals(
listOf("instance of ${A::bar}"),
A::bar.parameters.map(Any::toString)
)
assertEquals(
listOf("parameter #0 name of ${::baz}"),
::baz.parameters.map(Any::toString)
)
return "OK"
}