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

  }

}

class B : Java2, Java1, KotlinInterface {
  override var b: Boolean
    field = false
    override get(): Boolean {
      return true
    }
    override set

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

  }

}

class C : Java2, KotlinInterface, KotlinInterface2 {
  override var b: Boolean
    field = b
    override get
    override set

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

  }

  override fun isB(): Boolean {
    return true
  }

}

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

  }

}

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

  }

  override fun setA(t: Any?) {
  }

}

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

  }

}

class G : Java2, Java4 {
  override var b: Boolean
    field = b
    override get
    override set

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

  }

  override fun getA(): Int {
    return 10
  }

}

abstract class H : Java4, KotlinInterface2 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class I : Java4, KotlinInterface2 {
  override var b: Boolean
    field = false
    override get(): Boolean {
      return true
    }
    override set(value: Boolean) {
      <this>.#b = false
    }

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

  }

}

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

  }

}

class K : Java2, KotlinInterface3 {
  constructor() /* primary */ {
    super/*Java2*/()
    /* <init>() */

  }

  override fun setA(t: Any?) {
  }

}

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

  }

}

class M : Java2, Java5 {
  constructor() /* primary */ {
    super/*Java2*/()
    /* <init>() */

  }

  override fun setA(t: Any) {
  }

}

interface KotlinInterface {
  abstract var b: Boolean
    abstract get
    abstract set

}

interface KotlinInterface2 {
  fun isB(): Boolean {
    return true
  }

}

interface KotlinInterface3 : Java3 {
}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M) {
  a.getA() /*~> Unit */
  a.isB() /*~> Unit */
  b.getA() /*~> Unit */
  b.setA(t = 2)
  b.isB() /*~> Unit */
  c.getA() /*~> Unit */
  c.isB() /*~> Unit */
  c.setA(t = 2)
  c(super<C>).#b = false
  d.getA() /*~> Unit */
  d(super<D>).#b /*~> Unit */
  d.isB() /*~> Unit */
  e.getA() /*~> Unit */
  e(super<E>).#b /*~> Unit */
  e.isB() /*~> Unit */
  f.getA() /*~> Unit */
  f.isB() /*~> Unit */
  f.setA(t = 2)
  g.getA() /*~> Unit */
  g.isB() /*~> Unit */
  g.setA(t = 2)
  h.<get-b>() /*~> Unit */
  h.isB() /*~> Unit */
  h.<set-b>(<set-?> = false)
  i.<get-b>() /*~> Unit */
  i.isB() /*~> Unit */
  i.<set-b>(value = false)
  j.getA() /*~> Unit */
  j.isB() /*~> Unit */
  k.getA() /*~> Unit */
  k.isB() /*~> Unit */
  l.getA() /*~> Unit */
  l.isB() /*~> Unit */
  m.getA() /*~> Unit */
  m.isB() /*~> Unit */
}
