// TARGET_BACKEND: JVM // FILE: Java1.java public class Java1 { public void foo(T t) { } public T bar() { return null; } } // FILE: Java2.java public interface Java2 { public void foo(T t); public T bar(); } // FILE: Java3.java public interface Java3 { void foo(U a); U bar(); } // FILE: 1.kt class A: Java1() class B : Java1() { override fun bar(): Int { return 1 } override fun foo(t: Int?) {} } abstract class C : Java2 class D : Java2 { override fun foo(t: Double) { } override fun bar(): Double { return 1.1 } } abstract class E : Java3 class F : Java3 { override fun foo(a: U) { } override fun bar(): U { return null!! } } fun test(a: A, b: B, c: C, d: D, e: E, f: F) { a.foo(null) a.foo(1) a.bar() b.foo(null) b.foo(1) b.bar() c.foo(null) c.foo(1.1) c.bar() d.foo(1.1) d.bar() e.foo(1) e.bar() f.foo(2.2) f.bar() }