[FIR] Make overriding generic callables independent of TP bounds order

This commit is contained in:
simon.ogorodnik
2020-06-01 21:34:43 +03:00
parent 2287435740
commit ab02381a83
7 changed files with 167 additions and 33 deletions
@@ -0,0 +1,47 @@
// 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 <P extends I1 & I2 & I3> void foo(P p) {}
}
public static class Derived extends Base {
@Override
public <P extends I1 & I3 & I2> 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 <P> foo()
where P : KI1, P : KI2 {}
}
class KDerived : KBase() {
override fun <P> 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<KI12>()
}