abstract class A : JavaDefault, JavaPublic {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class B : JavaDefault, JavaPublic {
  val a: Int
    field = 1
    get

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

  }

  override fun foo() {
  }

}

class C : JavaProtected, JavaPublic {
  val a: Int
    field = 1
    get

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

  }

  override fun foo() {
  }

}

abstract class D : JavaPrivate, JavaPublic {
  constructor() /* primary */ {
    super/*JavaPrivate*/()
    /* <init>() */

  }

}

class E : JavaPrivate, JavaPublic {
  val a: Int
    field = 1
    get

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

  }

  override fun foo() {
  }

}

class F : JavaProtected, JavaDefault {
  val a: Int
    field = 1
    get

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

  }

  override fun foo() {
  }

}

abstract class G : JavaPrivate, JavaDefault {
  constructor() /* primary */ {
    super/*JavaPrivate*/()
    /* <init>() */

  }

}

class H : JavaPrivate, JavaDefault {
  val a: Int
    field = 1
    get

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

  }

  override fun foo() {
  }

}

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