// MODULE: separate // FILE: KotlinInternal.kt open class KotlinInternal { constructor() /* primary */ { super/*Any*/() /* () */ } internal open fun foo() { } internal open val a: Int internal open get(): Int { return 1 } } // MODULE: main // FILE: test.kt class A : Java1 { constructor() /* primary */ { super/*Java1*/() /* () */ } } class B : Java1 { constructor() /* primary */ { super/*Java1*/() /* () */ } internal override fun foo() { } internal override val a: Int internal override get(): Int { return 5 } } class C : Java2 { constructor() /* primary */ { super/*Java2*/() /* () */ } } class D : Java2 { constructor() /* primary */ { super/*Java2*/() /* () */ } override fun foo() { } internal override val a: Int internal override get(): Int { return 5 } } class E : Java3 { constructor() /* primary */ { super/*Java3*/() /* () */ } } class F : Java3 { constructor() /* primary */ { super/*Java3*/() /* () */ } override fun foo() { } internal override val a: Int internal override get(): Int { return 5 } } class G : Java4 { constructor() /* primary */ { super/*Java4*/() /* () */ } } class H : Java4 { constructor() /* primary */ { super/*Java4*/() /* () */ } internal override val a: Int internal override get(): Int { return 5 } } class I : Java5 { constructor() /* primary */ { super/*Java5*/() /* () */ } } class J : Java5 { constructor() /* primary */ { super/*Java5*/() /* () */ } override fun foo() { } internal override val a: Int internal override get(): Int { return 5 } } class K : KotlinInternal, JavaPublic { constructor() /* primary */ { super/*KotlinInternal*/() /* () */ } override fun foo() { } override val a: Int override get(): Int { return 5 } } class L : KotlinInternal, JavaDefault { constructor() /* primary */ { super/*KotlinInternal*/() /* () */ } override fun foo() { } override val a: Int override get(): Int { return 5 } } fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L) { a.foo() a.() /*~> Unit */ b.foo() b.() /*~> Unit */ c.foo() c.#a /*~> Unit */ d.foo() d.() /*~> Unit */ e.foo() e.#a /*~> Unit */ f.foo() f.() /*~> Unit */ g.() /*~> Unit */ h.() /*~> Unit */ i.foo() i.#a /*~> Unit */ j.foo() j.() /*~> Unit */ k.foo() k.() /*~> Unit */ l.foo() l.() /*~> Unit */ }