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

  }

}

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

  }

  override operator fun get(i: Int?): Int {
    return 2
  }

  override operator fun invoke() {
  }

  override operator fun plus(i: Int?): Java1 {
    return Java1()
  }

}

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

  }

  override operator fun get(i: Int?): Int {
    return 2
  }

  override operator fun invoke() {
  }

  override operator fun plus(i: Int?): Java1 {
    return Java1()
  }

}

fun test() {
  val a: A = A()
  val k: Unit = a.invoke()
  val k1: Java1 = a.plus(i = 1) /*!! Java1 */
  val k2: Int = a.get(i = 1) /*!! Int */
  val b: B = B()
  val k3: Unit = b.invoke()
  val k4: Java1 = b.plus(i = 1)
  val k5: Int = b.get(i = 1)
  val c: C = C()
  val k6: Unit = c.invoke()
  val k7: Java1 = c.plus(i = 1)
  val k8: Int = c.get(i = 1)
}
