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

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

  }

}

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

  }

}

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

  }

}

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

  }

  override fun bar(): MutableList<Int> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

  override fun foo(a: MutableList<Int>) {
  }

}

class E : Java1<String?> {
  constructor() /* primary */ {
    super/*Java1*/<String?>()
    /* <init>() */

  }

  override fun bar3(): MutableSet<String> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

  override fun foo3(c: MutableSet<String?>) {
  }

}

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

  }

  override fun bar2(): Queue<Any> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

  override fun foo2(b: Queue<Any>?) {
  }

}

fun test(a: A, b: B, c: C, d: D, e: E, f: F) {
  val k: MutableList<Int> = a.#a /*!! @FlexibleMutability MutableList<@FlexibleNullability Int?> */
  val k2: Queue<Int> = a.#b /*!! Queue<@FlexibleNullability Int?> */
  val k3: MutableSet<Int> = a.#c /*!! @FlexibleMutability MutableSet<@FlexibleNullability Int?> */
  a.#a = mutableListOf<Int>()
  a.#b = LinkedList<Int>()
  a.#c = mutableSetOf<Int>()
  val k4: MutableList<Int> = a.bar() /*!! @FlexibleMutability MutableList<@FlexibleNullability Int?> */
  val k5: Queue<Int> = a.bar2() /*!! Queue<@FlexibleNullability Int?> */
  val k6: MutableSet<Int> = A().bar3() /*!! @FlexibleMutability MutableSet<@FlexibleNullability Int?> */
  a.foo(a = k)
  a.foo2(b = k2)
  a.foo3(c = k3)
  val k19: MutableList<String?> = b.#a /*!! @FlexibleMutability MutableList<@FlexibleNullability String?> */
  val k20: Queue<String?> = b.#b /*!! Queue<@FlexibleNullability String?> */
  val k21: MutableSet<String?> = b.#c /*!! @FlexibleMutability MutableSet<@FlexibleNullability String?> */
  b.#a = mutableListOf<String?>()
  b.#b = LinkedList<String>()
  b.#c = mutableSetOf<String?>()
  val k22: MutableList<String?> = b.bar() /*!! @FlexibleMutability MutableList<@FlexibleNullability String?> */
  val k23: Queue<String?> = b.bar2() /*!! Queue<@FlexibleNullability String?> */
  val k24: MutableSet<String?> = b.bar3() /*!! @FlexibleMutability MutableSet<@FlexibleNullability String?> */
  b.foo(a = k19)
  b.foo2(b = k20)
  b.foo3(c = k21)
  val k25: MutableList<Any> = c.#a /*!! @FlexibleMutability MutableList<@FlexibleNullability Any?> */
  val k26: Queue<Any> = c.#b /*!! Queue<@FlexibleNullability Any?> */
  val k27: MutableSet<Any> = c.#c /*!! @FlexibleMutability MutableSet<@FlexibleNullability Any?> */
  c.#a = mutableListOf<Any>()
  c.#b = LinkedList<Any>()
  c.#c = mutableSetOf<Any>()
  val k28: MutableList<Any> = c.bar() /*!! @FlexibleMutability MutableList<@FlexibleNullability Any?> */
  val k29: Queue<Any> = c.bar2() /*!! Queue<@FlexibleNullability Any?> */
  val k30: MutableSet<Any> = c.bar3() /*!! @FlexibleMutability MutableSet<@FlexibleNullability Any?> */
  c.foo(a = k25)
  c.foo2(b = k26)
  c.foo3(c = k27)
  val k31: MutableList<Int> = d.bar()
  e.foo3(c = mutableSetOf<String?>(elements = [null, ""]))
  val k32: Queue<Any> = f.bar2()
  f.foo2(b = LinkedList<Any>())
}
