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

  }

}

class B : Java2, Java1, KotlinInterface {
  override var a: Int
    field = a
    override get
    override set

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

  }

  override fun bar(): Int {
    return 5
  }

  override fun foo(t: Int) {
  }

}

class C : Java1, KotlinInterface, KotlinInterface2 {
  override var a: Int
    field = a
    override get
    override set

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

  }

  override fun bar(): Int {
    return 1
  }

  override fun foo(t: Any) {
  }

}

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

  }

}

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

  }

  override fun foo(t: Int) {
  }

}

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

  }

}

class G : Java1, Java4 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(): Int {
    return 10
  }

  override fun foo(t: Int) {
  }

  override var a: Int
    override get(): Int {
      return 10
    }
    override set(value: Int) {
    }

}

class H : Java4, KotlinInterface2 {
  override var a: Int
    field = a
    override get
    override set

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

  }

  override fun bar(): Int {
    return 1
  }

  override fun foo(t: Any) {
  }

  override fun foo(t: Int) {
  }

}

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

  }

}

class J : Java5, KotlinInterface {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

  override var a: Int
    override get(): Int {
      return 10
    }
    override set(value: Int) {
    }

}

class K : Java5, Java3 {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

}

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

  }

  override fun foo(t: Int) {
  }

}

interface KotlinInterface {
  fun bar(): Int {
    return 10
  }

  fun foo(t: Int) {
  }

  abstract var a: Int
    abstract get
    abstract set

}

interface KotlinInterface2 {
  abstract fun bar(): Any

  abstract fun foo(t: Any)

  abstract val a: Any
    abstract get

}

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) {
  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.foo(t = "")
  c.bar() /*~> Unit */
  d.foo(t = 1)
  e.foo(t = 1)
  f.<get-a>() /*~> Unit */
  f.foo(t = 1)
  f.bar() /*~> Unit */
  g.<get-a>() /*~> Unit */
  g.foo(t = 1)
  g.bar() /*~> Unit */
  h.<get-a>() /*~> Unit */
  h.foo(t = 1)
  h.foo(t = "")
  h.bar() /*~> Unit */
  i.<get-a>() /*~> Unit */
  i.foo(t = 1)
  i.bar() /*~> Unit */
  j.<get-a>() /*~> Unit */
  j.foo(t = 1)
  j.bar() /*~> Unit */
  k.foo(t = 1)
  l.foo(t = 1)
}
