// TARGET_BACKEND: JVM // WITH_STDLIB // FILE: Java1.java public class Java1 { public void foo(T a) { } public T bar() { return null; } } // FILE: Java2.java public interface Java2 extends KotlinInterface { } // FILE: Java3.java public class Java3 extends Java1 { @Override public void foo(T a) { } @Override public T bar() { return null; } } // FILE: Java4.java public class Java4 extends KotlinClass { } // FILE: 1.kt class A : Java1(), Java2 //Kotlin ← Java1, Java2 ← Kotlin2 class B : Java1(), Java2 { override fun bar(): T { return null!! } override fun foo(a: T) { } } abstract class C: Java2, KotlinInterface2 //Kotlin ← Java, Kotlin2 ← Kotlin3 abstract class D : Java2, KotlinInterface2 { override fun foo(a: T) { } override fun bar(): T { return null!! } override fun foo(a: T) { } } class E : D() { override fun bar(): T { return null!! } } class F : KotlinClass(), Java2 //Kotlin ← Java, Kotlin2 ← Java2, Kotlin3 class G : KotlinClass(), Java2 { override fun bar(): T { return null!! } } class H : Java3(), Java2 //Kotlin ← Java1, Java2 ← Java3, Kotlin2 class I : Java3(), Java2 { override fun foo(a: T) { } } class J : Java4() //Kotlin ← Java ← Kotlin ← Java class L : Java4() { override fun foo(a: T) { } } interface KotlinInterface { fun foo(a: T) fun bar(): T } interface KotlinInterface2 { fun foo(a: T) fun bar(): T } open class KotlinClass : Java1() fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, l:L) { val k: Int = a.bar() val k3: Any = a.bar() a.foo(1) a.foo(null) a.foo(null) a.foo(listOf(null)) val k5: Int? = b.bar() val k6: Any = b.bar() b.foo(1) b.foo(null) b.foo(null) b.foo(listOf(null)) val k7: Int? = c.bar() val k8: Any = c.bar() c.foo(1) c.foo(null) c.foo(null) c.foo(listOf(null)) val k9: Int? = d.bar() val k10: Any = d.bar() d.foo(1) d.foo(null) d.foo(null) d.foo(listOf(null)) val k11: Int? = e.bar() val k12: Any = e.bar() e.foo(1) e.foo(null) e.foo(null) e.foo(listOf(null)) val k13: Int? = f.bar() val k14: Any = f.bar() f.foo(1) f.foo(null) f.foo(null) f.foo(listOf(null)) val k15: Int? = g.bar() val k16: Any = g.bar() g.foo(1) g.foo(null) g.foo(null) g.foo(listOf(null)) val k17: Int? = h.bar() val k18: Any = h.bar() h.foo(1) h.foo(null) h.foo(null) h.foo(listOf(null)) val k19: Int? = i.bar() val k20: Any = i.bar() i.foo(1) i.foo(null) i.foo(null) i.foo(listOf(null)) val k21: Int? = j.bar() val k22: Any = j.bar() j.foo(1) j.foo(null) j.foo(null) j.foo(listOf(null)) l.foo(1) l.bar() }