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

  }

}

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

  }

  override fun setA(t: Any?) {
  }

}

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

  }

}

class D : Java1, KotlinInterface {
  override var a: Any
    field = a
    override get
    override set

  override val b: Boolean
    field = b
    override get

  constructor(a: Any, b: Boolean) /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

interface KotlinInterface {
  abstract var a: Any
    abstract get
    abstract set

  abstract val b: Boolean
    abstract get

}

fun test(a: A, b: B, c: C, d: D) {
  a.getA() /*~> Unit */
  a.setA(t = 3)
  a.setA(t = "")
  a.isB() /*~> Unit */
  a.setB(t = false)
  b.getA() /*~> Unit */
  b.setA(t = 3)
  b.setA(t = "")
  b.isB() /*~> Unit */
  b.setB(t = false)
  c.<get-a>() /*~> Unit */
  c.<get-b>() /*~> Unit */
  c.isB() /*~> Unit */
  c.<set-a>(<set-?> = 1)
  c.setB(t = false)
  d.<get-a>() /*~> Unit */
  d.<get-b>() /*~> Unit */
  d.isB() /*~> Unit */
  d.<set-a>(<set-?> = 1)
  d.setB(t = false)
}
