class A : Java1, Java2 { constructor() /* primary */ { super/*Java1*/() /* () */ } override fun bar(): String { return "" } override fun foo(s: String) { } } class B : Java1, Java2 { constructor() /* primary */ { super/*Java1*/() /* () */ } } class C : Java1, Java3 { constructor() /* primary */ { super/*Java1*/() /* () */ } } class D : Java1, Java3 { constructor() /* primary */ { super/*Java1*/() /* () */ } @Nullable override fun bar(): String { return super.bar() /*!! String */ } @NotNull override fun foo(@NotNull s: String?) { super.foo(s = s) } } abstract class E : Java2, KotlinInterface { constructor() /* primary */ { super/*Any*/() /* () */ } } class F : Java2, KotlinInterface { constructor() /* primary */ { super/*Any*/() /* () */ } override fun bar(): String { return "" } override fun foo(s: String) { } } class G : Java1, KotlinInterface2 { constructor() /* primary */ { super/*Java1*/() /* () */ } } class H : Java1, Java2, Java3 { constructor() /* primary */ { super/*Java1*/() /* () */ } } interface KotlinInterface { abstract fun bar(): String abstract fun foo(s: String) val nullableString: String get(): String { return "" } } interface KotlinInterface2 { @NotNull abstract fun bar(): String @NotNull abstract fun foo(@NotNull s: String) val nullableString: String @NotNull get(): String { return "" } } fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) { val k: String? = a(super).#nullableString val k2: String = a.bar() a.foo(s = "") val k3: String = b(super).#nullableString /*!! String */ val k4: String = b.bar() /*!! String */ b.foo(s = "") b.foo(s = null) val k5: String = c(super).#nullableString /*!! String */ val k6: String? = c.bar() c.foo(s = "") c.foo(s = null) val k7: String = d(super).#nullableString /*!! String */ val k8: String = d.bar() d.foo(s = "") d.foo(s = null) val k9: String = e.() val k10: String = e.bar() /*!! String */ e.foo(s = "") val k11: String = f.() val k12: String = f.bar() f.foo(s = "") val k13: String = g(super).#nullableString /*!! String */ val k14: String = g.bar() g.foo(s = "") g.foo(s = null) val k15: String = h(super).#nullableString /*!! String */ val k16: String = h.bar() /*!! String */ h.foo(s = "") h.foo(s = null) }