// FIR_IDENTICAL // 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 { public void foo(T a); public T bar(); } // FILE: 1.kt class A : Java1(), Java2 //Kotlin ← Java1, Java2 class B : Java1(), Java2 { override fun bar(): T { return null!! } override fun foo(a: T) { } } abstract class C : Java1(), KotlinInterface // Kotlin ← Java, Kotlin2 class D : Java1(), KotlinInterface { override fun bar(): T { return null!! } override fun foo(a: T) { } } class E : Java1(), Java2, KotlinInterface // Kotlin ← Java1, Java2, Kotlin2 class F : Java1(), Java2, KotlinInterface { override fun bar(): T { return null!! } } interface KotlinInterface { fun foo(a: T) fun bar(): T } fun test(a: A, b: B, c: C, d: D, e: E, f: F) { val k: Int = a.bar() val k3: Any = a.bar() val k4: Nothing = 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() e.foo(1) e.foo(null) val k12: Any? = f.bar() f.foo(1) }