Support introspection of parameter names and indices in reflection
This commit is contained in:
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
import kotlin.reflect.*
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun foo(bar: String): Int = bar.length()
|
||||
|
||||
class A(val c: String) {
|
||||
fun foz(baz: Int) {}
|
||||
}
|
||||
|
||||
fun Int.qux(zux: String) {}
|
||||
|
||||
fun checkParameters(f: KFunction<*>, names: List<String?>) {
|
||||
val params = f.parameters
|
||||
assertEquals(names, params.map { it.name })
|
||||
assertEquals((0..params.size() - 1).toList(), params.mapIndexed { index, element -> index })
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
checkParameters(::box, listOf())
|
||||
checkParameters(::foo, listOf("bar"))
|
||||
checkParameters(A::foz, listOf(null, "baz"))
|
||||
checkParameters(Int::qux, listOf(null, "zux"))
|
||||
|
||||
checkParameters(::A, listOf("c"))
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
import kotlin.reflect.*
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
var default: Int = 0
|
||||
|
||||
var defaultAnnotated: Int = 0
|
||||
public set
|
||||
|
||||
var custom: Int = 0
|
||||
set(myName: Int) {}
|
||||
|
||||
fun checkPropertySetterParam(property: KMutableProperty<*>, name: String?) {
|
||||
val parameter = property.setter.parameters.single()
|
||||
assertEquals(0, parameter.index)
|
||||
assertEquals(name, parameter.name)
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
checkPropertySetterParam(::default, null)
|
||||
checkPropertySetterParam(::defaultAnnotated, null)
|
||||
checkPropertySetterParam(::custom, "myName")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user