abstract class A : HashMap, Java1, SortedMap { constructor() /* primary */ { super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>() /* () */ } } abstract class B : HashMap, Java1, SortedMap { constructor() /* primary */ { super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>() /* () */ } override fun remove(key: Boolean): Boolean? { return false } } abstract class C : HashMap, KotlinInterface, SortedMap { constructor() /* primary */ { super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>() /* () */ } } abstract class D : HashMap, KotlinInterface, SortedMap { constructor() /* primary */ { super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>() /* () */ } override fun remove(key: Boolean): Boolean { return true } } abstract class E : KotlinInterface, SortedMap, MutableMap { constructor() /* primary */ { super/*Any*/() /* () */ } } abstract class F : KotlinInterface, SortedMap, MutableMap { constructor() /* primary */ { super/*Any*/() /* () */ } override fun remove(key: Any): Boolean { return true } } abstract class I : Java2, Java1 { constructor() /* primary */ { super/*Java2*/() /* () */ } } abstract class J : Java2, Java1 { constructor() /* primary */ { super/*Java2*/() /* () */ } override fun remove(key: Boolean?): Boolean? { return true } } abstract class K : Java3, Java1 { constructor() /* primary */ { super/*Java3*/() /* () */ } } abstract class L : Java3, Java1 { constructor() /* primary */ { super/*Java3*/() /* () */ } override fun remove(key: Boolean): Boolean { return true } } abstract class M : Java1, KotlinInterface3 { constructor() /* primary */ { super/*Any*/() /* () */ } } abstract class N : Java1, KotlinInterface3 { constructor() /* primary */ { super/*Any*/() /* () */ } override fun remove(key: Boolean): Boolean? { return null } } interface KotlinInterface { abstract fun remove(key: Any): Boolean } interface KotlinInterface2 : SortedMap { } interface KotlinInterface3 : MutableMap { } fun test(a: A, b: B, c: C, d: D, e: E, f: F, i: I, j: J, k: K, l: L, m: M, n: N) { a.() /*~> Unit */ a.remove(key = null) /*~> Unit */ a.remove(key = true) /*~> Unit */ b.() /*~> Unit */ b.remove(key = null) /*~> Unit */ b.remove(key = true) /*~> Unit */ c.() /*~> Unit */ c.remove(key = null) /*~> Unit */ c.remove(key = true) /*~> Unit */ c.remove(key = "") /*~> Unit */ d.() /*~> Unit */ d.remove(key = true) /*~> Unit */ d.remove(key = "") /*~> Unit */ e.() /*~> Unit */ e.remove(key = true) /*~> Unit */ e.remove(key = "") /*~> Unit */ e.remove(key = null) /*~> Unit */ f.() /*~> Unit */ f.remove(key = true) /*~> Unit */ f.remove(key = "") /*~> Unit */ f.remove(key = null) /*~> Unit */ i.() /*~> Unit */ i.remove(key = null) /*~> Unit */ i.remove(key = true) /*~> Unit */ i.remove(key = "") /*~> Unit */ j.() /*~> Unit */ j.remove(key = null) /*~> Unit */ j.remove(key = true) /*~> Unit */ j.remove(key = "") /*~> Unit */ k.() /*~> Unit */ k.remove(key = null) /*~> Unit */ k.remove(key = true) /*~> Unit */ k.remove(key = "") /*~> Unit */ l.() /*~> Unit */ l.remove(key = null) /*~> Unit */ l.remove(key = true) /*~> Unit */ l.remove(key = "") /*~> Unit */ m.() /*~> Unit */ m.remove(key = null) /*~> Unit */ m.remove(key = true) /*~> Unit */ m.remove(key = "") /*~> Unit */ n.() /*~> Unit */ n.remove(key = null) /*~> Unit */ n.remove(key = true) /*~> Unit */ n.remove(key = "") /*~> Unit */ }