// TARGET_BACKEND: JVM // WITH_STDLIB // FILE: JavaClass.java public class JavaClass { public static class C extends B { public OutPair foo() { return super.foo(); } public In bar() { return super.bar(); } } public static String test() { A a = new C(); if (!a.foo().getX().equals("OK")) return "fail 1"; if (!a.foo().getY().equals(123)) return "fail 2"; if (!a.bar().make("123").equals("123")) return "fail 3"; return "OK"; } } // FILE: main.kt class OutPair(val x: X, val y: Y) class In { fun make(x: Z): String = x.toString() } @JvmSuppressWildcards(suppress = false) interface A { fun foo(): OutPair fun bar(): In } abstract class B : A { override fun foo(): OutPair = OutPair("OK", 123) override fun bar(): In = In() } fun box(): String { return JavaClass.test(); }