Use descriptors for reflection on top level properties

This also allows to obtain a Field object from the package part (see
mapping.kt)
This commit is contained in:
Alexander Udalov
2015-02-19 20:28:58 +03:00
parent d1debf586c
commit 1a618deeab
9 changed files with 116 additions and 51 deletions
@@ -0,0 +1,24 @@
import kotlin.platform.platformName
import kotlin.reflect.jvm.*
var state: String = "value"
[platformName("getter")]
get
[platformName("setter")]
set
fun box(): String {
val p = ::state
if (p.name != "state") return "Fail name: ${p.name}"
if (p.get() != "value") return "Fail get: ${p.get()}"
p.set("OK")
val getterName = p.javaGetter!!.getName()
if (getterName != "getter") return "Fail getter name: $getterName"
val setterName = p.javaSetter!!.getName()
if (setterName != "setter") return "Fail setter name: $setterName"
return p.get()
}
@@ -6,8 +6,9 @@ var topLevel = "123"
fun box(): String {
val p = ::topLevel
// TODO: uncomment when fields are loaded from package parts
// assert(p.javaField != null, "Fail p field")
assert(p.javaField != null, "Fail p field")
val field = p.javaField!!
assert(field.getDeclaringClass().getName() contains "_DefaultPackage\$", "Fail field not in package part: ${field.getDeclaringClass()}")
val getter = p.javaGetter!!
val setter = p.javaSetter!!