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:
+24
@@ -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!!
|
||||
|
||||
Reference in New Issue
Block a user