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

class B<R : Any?> : Java3<R>, Java1<R> {
  constructor() /* primary */ {
    super/*Java3*/<R>()
    /* <init>() */

  }

}

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

  }

}

interface A<R : Any?> : Java1<R>, Java2<R> {
}

interface C<R : Any?> : Java1<R>, KotlinInterface<R> {
}

interface D<R : Any?> : Java1<R>, Java2<R>, KotlinInterface<R> {
}

interface F<R : Any?> : Java1<R>, KotlinInterface2<R>, KotlinInterface<R> {
}

interface KotlinInterface<T : Any?> {
  abstract fun bar(o: T)

  abstract fun foo(): T

  abstract var a: T
    abstract get
    abstract set

}

interface KotlinInterface2<T : Any?> {
  abstract fun bar(o: T)

  abstract fun foo(): T

  abstract var a: T
    abstract get
    abstract set

}

fun test(a: A<Int>, b: B<String>, c: C<Int>, d: D<String>, e: E<Int>, f: F<String>) {
  val k: Int = a.foo() /*!! Int */
  val k2: Unit = a.bar(o = 2)
  val k3: String = b.#a /*!! String */
  b.#a = "1"
  val k4: String = b.foo() /*!! String */
  val k5: Unit = b.bar(o = null)
  val k6: Unit = b.bar(o = "")
  val k7: Int = c.<get-a>()
  c.<set-a>(<set-?> = 1)
  val k8: Int = c.foo()
  val k9: Unit = c.bar(o = 1)
  val k10: Unit = c.bar(o = null)
  val k11: String = d.<get-a>()
  d.<set-a>(<set-?> = "")
  val k12: String = d.foo()
  val k13: Unit = d.bar(o = "")
  val k14: Unit = d.bar(o = null)
  val k15: Int = e.#a /*!! Int */
  e.#a = 1
  val k16: Int = e.foo() /*!! Int */
  val k17: Unit = e.bar(o = 1)
  val k18: Unit = e.bar(o = null)
  val k19: String = f.<get-a>()
  f.<set-a>(<set-?> = "")
  val k20: String = f.foo()
  val k21: Unit = f.bar(o = "")
  val k22: Unit = f.bar(o = null)
}
