// MODULE: separate
// MODULE: main
// FILE: test.kt

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

  }

}

class B : Java2 {
  val a: Int
    field = 3
    get

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

  }

  override fun foo() {
  }

}

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

  }

}

class D : Java4 {
  val a: Int
    field = 3
    get

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

  }

  override fun foo() {
  }

}

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

  }

}

class F : Java6 {
  val a: Int
    field = 3
    get

  constructor() /* primary */ {
    super/*Java6*/()
    /* <init>() */

  }

  override fun foo() {
  }

}

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

  }

}

class H : Java7 {
  val a: Int
    field = 3
    get

  constructor() /* primary */ {
    super/*Java7*/()
    /* <init>() */

  }

  override fun foo() {
  }

}

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

  }

}

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

  }

}

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

  }

}

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

  }

}

open class KotlinClass4 : JavaSeparate1 {
  constructor() /* primary */ {
    super/*JavaSeparate1*/()
    /* <init>() */

  }

}

open class KotlinClass5 : JavaSeparate2 {
  constructor() /* primary */ {
    super/*JavaSeparate2*/()
    /* <init>() */

  }

}

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