Files
kotlin-fork/compiler/testData/codegen/box/specialBuiltins/throwableComplex.kt
T
2021-09-08 19:56:38 +03:00

48 lines
1.3 KiB
Kotlin
Vendored

// Super calls to Throwable properties are not supported
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
open class Base(message: String? = null, cause: Throwable? = null) : Throwable(message, cause)
open class Base2(message: String? = null, cause: Throwable? = null): Base(message, cause)
open class Override(message: String? = null, cause: Throwable? = null) : Base2(message, cause) {
var i = 0
override val message: String?
get() = "Override: " + super.message + "${i++}"
}
open class OverBase(message: String? = null, cause: Throwable? = null): Override(message, cause)
open class OverOverride(message: String? = null, cause: Throwable? = null) : OverBase(message, cause) {
override val message: String?
get() = "OverOver: " + super.message + "${i++}"
override val cause: Throwable?
get() = super.cause ?: this
}
fun box(): String {
check(Base("O", Base("K")), "OK")
check(Override("OK"), "Override: OK0")
check(OverOverride("OK"), "OverOver: Override: OK01OverOver: Override: OK23")
return "OK"
}
fun check(t: Throwable, msg: String) {
try {
throw t
} catch (e: Throwable) {
val c = t.cause
val m = if (c != null) t.message!! + c.message!! else t.message!!
if (m != msg) throw AssertionError(m)
}
}