// MODULE: separate
// FILE: KotlinInternal.kt

open class KotlinInternal {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  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*/()
    /* <init>() */

  }

}

class B : Java1 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  internal override fun foo() {
  }

  internal override val a: Int
    internal override get(): Int {
      return 5
    }

}

class C : Java2 {
  constructor() /* primary */ {
    super/*Java2*/()
    /* <init>() */

  }

}

class D : Java2 {
  constructor() /* primary */ {
    super/*Java2*/()
    /* <init>() */

  }

  override fun foo() {
  }

  internal override val a: Int
    internal override get(): Int {
      return 5
    }

}

class E : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

}

class F : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

  override fun foo() {
  }

  internal override val a: Int
    internal override get(): Int {
      return 5
    }

}

class G : Java4 {
  constructor() /* primary */ {
    super/*Java4*/()
    /* <init>() */

  }

}

class H : Java4 {
  constructor() /* primary */ {
    super/*Java4*/()
    /* <init>() */

  }

  internal override val a: Int
    internal override get(): Int {
      return 5
    }

}

class I : Java5 {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

}

class J : Java5 {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

  override fun foo() {
  }

  internal override val a: Int
    internal override get(): Int {
      return 5
    }

}

class K : KotlinInternal, JavaPublic {
  constructor() /* primary */ {
    super/*KotlinInternal*/()
    /* <init>() */

  }

  override fun foo() {
  }

  override val a: Int
    override get(): Int {
      return 5
    }

}

class L : KotlinInternal, JavaDefault {
  constructor() /* primary */ {
    super/*KotlinInternal*/()
    /* <init>() */

  }

  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.<get-a>() /*~> Unit */
  b.foo()
  b.<get-a>() /*~> Unit */
  c.foo()
  c.#a /*~> Unit */
  d.foo()
  d.<get-a>() /*~> Unit */
  e.foo()
  e.#a /*~> Unit */
  f.foo()
  f.<get-a>() /*~> Unit */
  g.<get-a>() /*~> Unit */
  h.<get-a>() /*~> Unit */
  i.foo()
  i.#a /*~> Unit */
  j.foo()
  j.<get-a>() /*~> Unit */
  k.foo()
  k.<get-a>() /*~> Unit */
  l.foo()
  l.<get-a>() /*~> Unit */
}
