// FULL_JDK import javaFields as J import java.lang.reflect.* import kotlin.reflect.* import kotlin.reflect.jvm.* fun box(): String { val i = J::i val s = J::s // Check that correct reflection objects are created assert(i !is KMutableProperty<*>, "Fail i class: ${i.javaClass}") assert(s is KMutableProperty<*>, "Fail s class: ${s.javaClass}") // Check that no Method objects are created for such properties assert(i.javaGetter == null, "Fail i getter") assert(s.javaGetter == null, "Fail s getter") assert(s.javaSetter == null, "Fail s setter") // Check that correct Field objects are created val ji = i.javaField!! val js = s.javaField!! assert(Modifier.isFinal(ji.getModifiers()), "Fail i final") assert(!Modifier.isFinal(js.getModifiers()), "Fail s final") // Check that those Field objects work as expected val a = J(42, "abc") assert(ji.get(a) == 42, "Fail ji get") assert(js.get(a) == "abc", "Fail js get") js.set(a, "def") assert(js.get(a) == "def", "Fail js set") assert(a.s == "def", "Fail js access") // Check that valid Kotlin reflection objects are created by those Field objects val ki = ji.kotlin as KProperty1 val ks = js.kotlin as KMutableProperty1 assert(ki.get(a) == 42, "Fail ki get") assert(ks.get(a) == "def", "Fail ks get") ks.set(a, "ghi") assert(ks.get(a) == "ghi", "Fail ks set") return "OK" }