class A : Java1, Java2, 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, Java3 { constructor() /* primary */ { super/*Java1*/() /* () */ } fun test1() { return .foo(t = 1) } fun test2(): @FlexibleNullability Int? { return bar<@FlexibleNullability Int?>() } fun test3(): @FlexibleNullability Number? { return .bar() } fun test4() { return foo<@FlexibleNullability String?>(t = "") } fun test5() { return .foo(t = 1.5) } fun test6() { return .foo(t = 1.5, t2 = 8) } fun test7() { return .foo(t = 1, t2 = 8) } } class C : KotlinClass, Java2 { constructor() /* primary */ { super/*KotlinClass*/() /* () */ } fun test1() { return foo<@FlexibleNullability Int?>(t = 1) } fun test2(): Int { return bar<@FlexibleNullability Int?>() /*!! Int */ } fun test3() { return foo<@FlexibleNullability String?>(t = "") } fun test4() { return foo<@FlexibleNullability Double?>(t = 1.5) } fun test5() { return foo<@FlexibleNullability Any?>(t = 1.5, t2 = 8) } fun test6() { return foo<@FlexibleNullability Int?>(t = 1, t2 = 8) } } class D : Java4, Java2 { constructor() /* primary */ { super/*Java4*/() /* () */ } fun test1() { return foo<@FlexibleNullability Int?>(t = 1) } fun test2(): Int { return bar<@FlexibleNullability Int?>() /*!! Int */ } fun test3() { return foo<@FlexibleNullability String?>(t = "") } fun test4() { return foo<@FlexibleNullability Double?>(t = 1.5) } fun test5() { return foo<@FlexibleNullability Any?>(t = 1.5, t2 = 8) } fun test6() { return foo<@FlexibleNullability Int?>(t = 1, t2 = 8) } } open class KotlinClass : Java1 { constructor() /* primary */ { super/*Java1*/() /* () */ } } 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, c: C, d: D) { a.test1() a.test2() /*~> Unit */ a.test3() a.test4() a.test5() b.test1() b.test2() /*~> Unit */ b.test3() /*~> Unit */ b.test4() b.test5() b.test6() b.test7() c.test1() c.test2() /*~> Unit */ c.test3() c.test4() c.test5() c.test6() d.test1() d.test2() /*~> Unit */ d.test3() d.test4() d.test5() d.test6() }