// MODULE: separate
// MODULE: main
// FILE: 1.kt

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

  }

  override fun bar(o: Any?) {
  }

  override fun bar(o: Int) {
  }

  override fun foo(): Int {
    return 1
  }

}

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

  }

  override fun bar(o: Int) {
  }

}

class C : SeparateModuleJava1, SeparateModuleJava2 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(o: Any?) {
  }

  override fun bar(o: Int) {
  }

  override fun foo(): Int {
    return 1
  }

}

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

  }

  override fun bar(o: Any?) {
  }

  override fun bar(o: Int) {
  }

  override fun foo(): Int {
    return 1
  }

}

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

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

  }

  override fun bar(o: Any?) {
  }

  override fun bar(o: Int) {
  }

  override fun foo(): Int {
    return 1
  }

}

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

  }

  override fun bar(o: Any?) {
  }

  override fun foo(): Int {
    return 1
  }

}

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

  }

  override fun bar(o: Any?) {
  }

  override fun bar(o: Int) {
  }

  override fun foo(): Int {
    return 1
  }

  override var a: Int
    override get(): Int {
      return TODO(reason = "")
    }
    override set(value: Int) {
    }

}

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

  }

  override fun bar(o: Any) {
  }

}

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

  }

  override fun bar(o: Any?) {
  }

}

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

  }

  override fun bar(o: Any?) {
  }

  override fun bar(o: Int) {
  }

  override fun bar(o: Number?) {
  }

  override fun foo(): Int {
    return 1
  }

}

interface KotlinInterface {
  abstract fun bar(o: Int)

  abstract fun foo(): Int

  abstract var a: Int
    abstract get
    abstract set

}

interface KotlinInterface2 {
  abstract fun bar(o: Any)

  abstract fun foo(): Any

  abstract var a: Any
    abstract get
    abstract set

}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J) {
  val k1: Int = a.foo()
  val k2: Unit = a.bar(o = 1)
  val k3: Unit = a.bar(o = "")
  val k4: Unit = a.bar(o = null)
  val k5: Int = b.foo()
  val k6: Unit = b.bar(o = 1)
  val k7: Unit = b.bar(o = "")
  val k8: Unit = b.bar(o = null)
  val k9: Any = #a /*!! Any */
  val k10: Int = #a
  val k11: Any = #a /*!! Any */
  val k12: Int = #a
  val k13: Int = c.foo()
  val k14: Unit = c.bar(o = 1)
  val k15: Unit = c.bar(o = "")
  val k16: Unit = c.bar(o = null)
  val k17: Int = d.foo()
  val k18: Unit = d.bar(o = 1)
  val k19: Unit = d.bar(o = "")
  val k20: Unit = d.bar(o = null)
  val k22: Int = e.foo()
  val k23: Unit = e.bar(o = 1)
  val k24: Unit = e.bar(o = "")
  val k25: Unit = e.bar(o = null)
  val k26: Int = e.<get-a>()
  e.<set-a>(<set-?> = 4)
  val k27: Int = f.foo()
  val k28: Unit = f.bar(o = 1)
  val k29: Unit = f.bar(o = "")
  val k31: Int = f.<get-a>()
  f.<set-a>(<set-?> = 4)
  val k32: Int = g.foo()
  val k33: Unit = g.bar(o = 1)
  val k34: Unit = g.bar(o = 1.2)
  val k35: Unit = g.bar(o = "")
  val k36: Unit = g.bar(o = null)
  val k37: Number = #a /*!! Number */
  val k38: Int = h.foo()
  val k39: Unit = h.bar(o = 1)
  val k40: Unit = h.bar(o = "")
  val k41: Int = h.<get-a>()
  h.<set-a>(<set-?> = 4)
  val k42: Int = i.foo()
  val k43: Unit = i.bar(o = 1)
  val k44: Unit = i.bar(o = "")
  val k45: Unit = i.bar(o = null)
  val k46: Int = j.foo()
  val k47: Unit = j.bar(o = 1)
  val k48: Unit = j.bar(o = "")
}
