// FILE: Test.java public class Test { public interface I1 {} public interface I2 {} public interface I3 {} public interface I123 extends I1, I2, I3 {} public static class Base { public
void foo(P p) {} } public static class Derived extends Base { @Override public
void foo(P p) {} } public static class DerivedRaw extends Base { public void foo(I1 p) {} } } // FILE: main.kt interface KI1 interface KI2 interface KI12 : KI1, KI2 open class KBase { open fun
foo() where P : KI1, P : KI2 {} } class KDerived : KBase() { override fun
foo()
where P : KI2, P : KI1 {}
}
fun callJava(derived: Test.Derived, derivedRaw: Test.DerivedRaw, v: Test.I123) {
derived.foo(v)
derivedRaw.foo(v)
}
fun callKotlin(derived: KDerived) {
derived.foo