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

  }

}

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

  }

  override fun bar(): Int {
    return 1
  }

  override fun foo(t: Int) {
  }

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

}

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

  }

}

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

  }

  override fun bar(): Int {
    return 1
  }

  override fun foo(t: Int) {
  }

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

}

interface KotlinInterface {
  abstract fun bar(): Int

  abstract fun foo(t: Int)

  abstract val a: Int
    abstract get

}

fun test(a: A, b: B, c: C, d: D) {
  a.<get-a>() /*~> Unit */
  a.foo(t = 1)
  a.bar() /*~> Unit */
  b.<get-a>() /*~> Unit */
  b.foo(t = 1)
  b.bar() /*~> Unit */
  c.<get-a>() /*~> Unit */
  c.foo(t = 1)
  c.bar() /*~> Unit */
  d.<get-a>() /*~> Unit */
  d.foo(t = 1)
  d.bar() /*~> Unit */
}
