blob: b2448c8b087209c9d982472bde3be47171275b1b [file]
// TARGET_BACKEND: JVM
// FILE: Base.java
import org.jetbrains.annotations.NotNull;
public interface Base {
Base foo(@NotNull String name);
}
// FILE: Derived.java
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public interface Derived extends Base {
@Override
@NotNull Derived foo(@Nullable String name);
}
// FILE: Impl.kt
abstract class Impl : Base {
override fun foo(name: String): Base = this
}
// FILE: test.kt
abstract class ImplDerived : Impl(), Derived {
abstract override fun foo(name: String?): Derived
}
abstract class DerivedImpl : Derived, Impl() {
abstract override fun foo(name: String?): Derived
}
fun box(): String {
val x1: ImplDerived = object : ImplDerived() {
override fun foo(name: String?): Derived = this
}
x1.foo("")
(x1 as Base).foo("")
(x1 as Derived).foo("")
(x1 as Impl).foo("")
val x2: DerivedImpl = object : DerivedImpl() {
override fun foo(name: String?): Derived = this
}
x2.foo("")
(x2 as Base).foo("")
(x2 as Derived).foo("")
(x2 as Impl).foo("")
return "OK"
}