| // TARGET_BACKEND: JVM | |
| // DUMP_IR | |
| // FULL_JDK | |
| // WITH_REFLECT | |
| // FILE: bar/Base.java | |
| package bar; | |
| import foo.A; | |
| public abstract class Base { | |
| protected A a = new A("fail"); | |
| protected void foo() {} | |
| } | |
| // FILE: main.kt | |
| package foo | |
| import kotlin.reflect.jvm.javaField | |
| import bar.Base | |
| class A(val s: String) | |
| class Derived : Base() { | |
| override fun foo() { | |
| // ir: resolved to fake-override field Derived.a in K1, | |
| // but to base field Base.a in K2 | |
| // However, box() works correctly in both cases | |
| (Derived::a).javaField!![this] = A("OK") | |
| } | |
| fun box(): String { | |
| foo() | |
| return a.s | |
| } | |
| } | |
| fun box(): String { | |
| return Derived().box() | |
| } |