JvmDefault. Allow non default inheritance with special flag

#KT-47000
This commit is contained in:
Mikhael Bogdanov
2021-10-30 15:00:15 +02:00
parent c9e7c5d156
commit afc149d460
24 changed files with 461 additions and 6 deletions
@@ -0,0 +1,39 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// FULL_JDK
// JVM_TARGET: 1.8
// WITH_RUNTIME
// MODULE: lib
// !JVM_DEFAULT_MODE: all
// FILE: Foo.kt
interface Foo {
fun toOverride(): List<String> = null!!
fun nonOverride(): List<String> = Thread.currentThread().getStackTrace().map { it.className + "." + it.methodName }
}
// MODULE: main(lib)
// !JVM_DEFAULT_MODE: disable
// !JVM_DEFAULT_ALLOW_NON_DEFAULT_INHERITANCE
// FILE: main.kt
interface Derived : Foo {
override fun toOverride() = Thread.currentThread().getStackTrace().map { it.className + "." + it.methodName }
}
class DerivedClass : Derived
fun box(): String {
val override = DerivedClass().toOverride()
if (override[1] != "Derived\$DefaultImpls.toOverride") return "fail 1: ${override[1]}"
if (override[2] != "DerivedClass.toOverride") return "fail 2: ${override[2]}"
if (override[3] != "MainKt.box") return "fail 3: ${override[3]}"
val nonOverride = DerivedClass().nonOverride()
if (nonOverride[1] != "Foo.nonOverride") return "fail 3: ${nonOverride[1]}"
if (nonOverride[2] != "MainKt.box") return "fail 4: ${nonOverride[2]}"
return "OK"
}