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

  }

}

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

  }

}

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

  }

}

class D : Java1, Java4 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

abstract class E : Java1, KotlinInterface {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

class F : Java1, KotlinInterface {
  override val a: Int
    field = a
    override get

  override val b: Int
    field = b
    override get

  override val c: Int
    field = c
    override get

  override val d: Int
    field = d
    override get

  constructor(a: Int, b: Int, c: Int, d: Int) /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

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

  }

}

interface KotlinInterface {
  abstract val a: Int
    abstract get

  abstract val b: Int
    abstract get

  abstract val c: Int
    abstract get

  abstract val d: Int
    abstract get

}

fun test(a: A, b: B, c: C, d: D, e: E, f: F) {
  a.#a /*~> Unit */
  a.#b /*~> Unit */
  a.#c /*~> Unit */
  a.#d /*~> Unit */
  b.#a /*~> Unit */
  b.#b /*~> Unit */
  b.#c /*~> Unit */
  b.#d /*~> Unit */
  c.#a /*~> Unit */
  c.#b /*~> Unit */
  c.#c /*~> Unit */
  c.#d /*~> Unit */
  d.#a /*~> Unit */
  d.#b /*~> Unit */
  d.#c /*~> Unit */
  d.#d /*~> Unit */
  e.#a /*~> Unit */
  e.#b /*~> Unit */
  e.#c /*~> Unit */
  e.#d /*~> Unit */
  f.<get-a>() /*~> Unit */
  f.<get-b>() /*~> Unit */
  f.<get-c>() /*~> Unit */
  f.<get-d>() /*~> Unit */
}
