// 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 : Java2 { constructor() /* primary */ { super/*Java2*/() /* () */ } } class C : Java2 { val a: Int field = 10 get constructor() /* primary */ { super/*Java2*/() /* () */ } override fun foo() { } } class D : Java3 { constructor() /* primary */ { super/*Java3*/() /* () */ } } class E : Java3 { val a: Int field = 10 get constructor() /* primary */ { super/*Java3*/() /* () */ } override fun foo() { } } class F : Java4 { constructor() /* primary */ { super/*Java4*/() /* () */ } } class G : Java5 { constructor() /* primary */ { super/*Java5*/() /* () */ } } class H : Java5 { val a: Int field = 10 get constructor() /* primary */ { super/*Java5*/() /* () */ } override fun foo() { } } abstract class I : KotlinInternal, JavaPublic { constructor() /* primary */ { super/*KotlinInternal*/() /* () */ } } class J : KotlinInternal, JavaPublic { val a: Int field = 10 get constructor() /* primary */ { super/*KotlinInternal*/() /* () */ } override fun foo() { } } class K : KotlinInternal, JavaDefault { val a: Int field = 10 get constructor() /* primary */ { super/*KotlinInternal*/() /* () */ } override fun foo() { } } fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) { b.foo() b.#a /*~> Unit */ c.foo() c.() /*~> Unit */ d.foo() d.#a /*~> Unit */ e.foo() e.() /*~> Unit */ g.foo() g.#a /*~> Unit */ h.foo() h.() /*~> Unit */ i.foo() j.foo() j.() /*~> Unit */ k.foo() k.() /*~> Unit */ }