class A : Java1, Java2 { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability Int?>() /* () */ } } class B : Java1, Java2 { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability Int?>() /* () */ } override fun bar(): Int { return 1 } } class C : Java1, Java2 where T : Number, T : Comparable { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability T?>() /* () */ } } class D : Java1, Java2 where T : Number, T : Comparable { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability T?>() /* () */ } override fun foo(t: T) { } } class E : Java1, Java3 { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability Number?>() /* () */ } } class F : Java1, Java3 { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability Number?>() /* () */ } override fun bar(): Number { return 2 } } class G : Java1, KotlinInterface { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability Int?>() /* () */ } } class H : Java1, KotlinInterface { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability T?>() /* () */ } } class I : Java1, KotlinInterface { constructor() /* primary */ { super/*Java1*/<@FlexibleNullability Int?>() /* () */ } override fun bar(): Int { return 3 } } interface KotlinInterface { abstract fun bar(): T? abstract fun foo(t: T) } fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I) { a.foo(t = null) a.foo(t = 1) a.bar() /*~> Unit */ b.foo(t = null) b.foo(t = 1) b.bar() /*~> Unit */ c.foo(t = null) c.foo(t = 1) c.bar() /*~> Unit */ d.foo(t = 1.1F) d.bar() /*~> Unit */ e.foo(t = 1) e.bar() /*~> Unit */ f.foo(t = 2.2) f.bar() /*~> Unit */ g.foo(t = 2) g.bar() /*~> Unit */ h.foo(t = null) h.bar() /*~> Unit */ i.foo(t = null) i.bar() /*~> Unit */ }