class A : Java1, KotlinInterface { constructor() /* primary */ { super/*Java1*/() /* () */ } fun test1() { return .foo(t = 1) } fun test2(): Int { return .bar() } fun test3() { return .foo(t = "") } fun test4() { return .foo(t = 1.5) } fun test5() { return .foo(t = 1.5, t2 = 8) } } class B : Java1, Java2 { constructor() /* primary */ { super/*Java1*/() /* () */ } fun test1() { return foo(t = 1) } fun test2(): Int { return bar<@FlexibleNullability Int?>() /*!! Int */ } fun test3() { return foo<@FlexibleNullability String?>(t = "") } fun test4() { return foo(t = 1.5) } fun test5() { return foo(t = 1.5, t2 = 8) } } interface KotlinInterface { fun bar(): T { return CHECK_NOT_NULL(arg0 = null) } fun foo(t: Number) { } fun foo(t: Number, t2: Int = 7) { } fun foo(t: T) { } } fun test(a: A, b: B) { a.test1() a.test2() /*~> Unit */ a.test3() a.test4() a.test5() b.test1() b.test2() /*~> Unit */ b.test3() b.test4() b.test5() }