blob: 9cfb4d2282dfcbd677bd8ff624f882fc74173739 [file]
@file:OptIn(ExperimentalVersionOverloading::class)
open class VersionedBase(
val first: Int = 1,
@IntroducedAt("1") val second: String = "A",
@IntroducedAt("2") val third: Int = 3,
)
class VersionedDerived : VersionedBase {
constructor(first: Int, @IntroducedAt("1") second: String = "B") : super(first, second)
constructor(@IntroducedAt("1") second: String = "C") : super(2, second)
constructor(flag: Boolean) : super(3)
}
class VersionedDelegating(
first: Int,
@IntroducedAt("1") second: String = "D",
) : VersionedBase(first, second) {
constructor(@IntroducedAt("1") second: String = "E") : this(2, second)
constructor(flag: Boolean) : this(3)
}
fun box(): String {
val base = VersionedBase()
if (base.first != 1 || base.second != "A" || base.third != 3) return "FAIL base"
val derived1 = VersionedDerived()
val derived2 = VersionedDerived(2)
val derived3 = VersionedDerived(2, "K")
val derived4 = VersionedDerived("K")
val derived5 = VersionedDerived(true)
if (derived1.second != "C") return "FAIL derived1"
if (derived2.second != "B") return "FAIL derived2"
if (derived3.second != "K") return "FAIL derived3"
if (derived4.second != "K") return "FAIL derived4"
if (derived5.second != "A") return "FAIL derived5"
val delegating1 = VersionedDelegating()
val delegating2 = VersionedDelegating(2)
val delegating3 = VersionedDelegating(2, "K")
val delegating4 = VersionedDelegating("K")
val delegating5 = VersionedDelegating(true)
if (delegating1.second != "E") return "FAIL delegating1"
if (delegating2.second != "D") return "FAIL delegating2"
if (delegating3.second != "K") return "FAIL delegating3"
if (delegating4.second != "K") return "FAIL delegating4"
if (delegating5.second != "D") return "FAIL delegating5"
return "OK"
}