| // TARGET_BACKEND: JVM |
| |
| // WITH_STDLIB |
| // FULL_JDK |
| |
| interface IActing { |
| fun act(): String |
| } |
| |
| class CActing(val value: String = "OK") : IActing { |
| override fun act(): String = value |
| } |
| |
| // final so no need in delegate field |
| class Test(val acting: CActing = CActing()) : IActing by acting { |
| } |
| |
| // even if open so we don't need delegate field |
| open class Test2(open val acting: CActing = CActing()) : IActing by acting { |
| } |
| |
| // even if open the backing field is final, so we don't need delegate field |
| class Test3() : Test2() { |
| override val acting = CActing("OKOK") |
| } |
| |
| fun box(): String { |
| try { |
| Test::class.java.getDeclaredField("\$\$delegate_0") |
| return "\$\$delegate_0 field generated for class Test but should not" |
| } |
| catch (e: NoSuchFieldException) { |
| // ok |
| } |
| |
| try { |
| Test2::class.java.getDeclaredField("\$\$delegate_0") |
| return "\$\$delegate_0 field generated for class Test2 but should not" |
| } |
| catch (e: NoSuchFieldException) { |
| // ok |
| } |
| |
| if (Test3().acting.act() != "OKOK") return "Fail Test3" |
| |
| val test = Test() |
| return test.act() |
| } |