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

  }

}

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

  }

  override fun bar(): MutableList<Any?> {
    return mutableListOf<Any?>(elements = [2])
  }

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

  val a: MutableList<Any?>
    get(): MutableList<Any?> {
      return mutableListOf<Any?>(elements = [1])
    }

}

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

  }

}

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

  }

  override fun bar(): MutableList<Any?> {
    return mutableListOf<Any?>(elements = [2])
  }

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

  val a: MutableList<Any?>
    get(): MutableList<Any?> {
      return mutableListOf<Any?>(elements = [2])
    }

}

fun test(a: A, b: B, c: C, d: D) {
  a.foo(a = null)
  a.foo(a = mutableListOf<Nothing?>(elements = [null]))
  val k: List<Any?> = a.bar() /*!! @FlexibleMutability @RawType MutableList<Any?> */
  b.foo(a = mutableListOf<Any?>(elements = [null]))
  b.foo(a = null)
  val k2: List<Any?>? = b.bar()
  c.foo(a = listOf<Nothing?>(element = null))
  c.foo(a = null)
  val k3: List<Any?> = c.bar() /*!! @FlexibleMutability MutableList<@EnhancedNullability Any?> */
  d.foo(a = mutableListOf<Any?>(elements = [null]))
  val k4: List<Any?> = d.bar()
}
