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

  }

}

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

  }

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

  override fun bar2(): MutableList<in Number> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

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

  override fun foo(a: MutableList<out Number>?) {
  }

  override fun foo2(a: MutableList<in Number>?) {
  }

  override fun foo3(a: MutableList<*>?) {
  }

}

fun test(a: A, b: B) {
  a.foo(a = null)
  a.foo(a = mutableListOf<@FlexibleNullability Number?>(elements = [null]))
  a.foo(a = listOf<Int>(element = 1))
  a.bar() /*~> Unit */
  a.foo2(a = null)
  a.foo2(a = mutableListOf<Number?>(elements = [null]))
  a.foo2(a = mutableListOf<@FlexibleNullability Number?>(elements = [1.1]))
  a.bar2() /*~> Unit */
  a.foo3(a = null)
  a.foo3(a = mutableListOf<Nothing?>(elements = [null]))
  a.foo3(a = listOf<Nothing?>(element = null))
  a.foo3(a = listOf<String>(element = ""))
  a.bar3() /*~> Unit */
  b.foo(a = null)
  b.foo(a = mutableListOf<Int>(elements = [1]))
  b.bar() /*~> Unit */
  b.foo2(a = null)
  b.foo2(a = mutableListOf<Number?>(elements = [null]))
  b.foo2(a = mutableListOf<Number>(elements = [1.1]))
  b.bar2() /*~> Unit */
  b.foo3(a = null)
  b.foo3(a = mutableListOf<Nothing?>(elements = [null]))
  b.foo3(a = mutableListOf<String>(elements = [""]))
  b.bar3() /*~> Unit */
}
