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

  }

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

  open operator fun invoke() {
  }

  open operator fun plus(i: Int?): A {
    return A()
  }

}

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

  }

}

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

  }

}

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

  }

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

  override operator fun invoke() {
  }

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

}

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

  }

}

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

  }

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

  override operator fun invoke() {
  }

  override operator fun plus(i: Int?): Java3 {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

interface KotlinInterface : Java3 {
}

fun test(b: B, c: C, d: D, e: E, f: F) {
  val k: Unit = b.invoke()
  val k1: A = b.plus(i = 1)
  val k2: Int = b.get(i = 1)
  val k3: Unit = c.invoke()
  val k4: A = c.plus(i = 1)
  val k5: Int = c.get(i = 1)
  val k6: Unit = d.invoke()
  val k7: A = d.plus(i = 1)
  val k8: Int = d.get(i = 1)
  val k9: Unit = e.invoke()
  val k10: Java3 = e.plus(i = 1) /*!! Java3 */
  val k11: Int = e.get(i = 1) /*!! Int */
  val k12: Unit = f.invoke()
  val k13: Java3 = f.plus(i = 1)
  val k14: Int = f.get(i = 1)
}
