open class A { constructor() /* primary */ { super/*Any*/() /* () */ } open fun foo(a: Int = 0, b: Any? = "string", c: Nothing? = null) { } } class B : Java1 { constructor() /* primary */ { super/*Java1*/() /* () */ } } class C : Java1 { constructor() /* primary */ { super/*Java1*/() /* () */ } override fun foo(a: Int, b: Any?, c: Nothing?) { } } class D : Java2 { constructor() /* primary */ { super/*Java2*/() /* () */ } } class E : Java2 { constructor() /* primary */ { super/*Java2*/() /* () */ } override fun foo(a: Int, b: Any?, c: Nothing?) { } } fun test(b: B, c: C, d: D, e: E) { b.foo() b.foo(a = 1) c.foo() c.foo(a = 1, b = "", c = null) d.foo() d.foo(a = 1, b = null, c = null) e.foo() e.foo(a = null, b = null, c = null) }