open class A {
  open var a: ArrayList<Int>
    field = arrayListOf<Int>()
    open get
    open set

  open var b: HashSet<Any?>
    field = hashSetOf<Any?>()
    open get
    open set

  open var c: IntArray
    field = intArrayOf()
    open get
    open set

  open var d: Array<out String>
    field = arrayOf<String>()
    open get
    open set

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

  }

  open fun bar(): ArrayList<Int> {
    return <this>.<get-a>()
  }

  open fun bar2(): HashSet<Any?> {
    return <this>.<get-b>()
  }

  open fun bar3(): IntArray {
    return <this>.<get-c>()
  }

  open fun bar4(): Array<out String> {
    return <this>.<get-d>()
  }

  open fun foo(a: ArrayList<Int>) {
  }

  open fun foo2(b: HashSet<Any?>) {
  }

  open fun foo3(c: IntArray) {
  }

  open fun foo4(d: Array<out String>) {
  }

}

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

  }

}

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

  }

  override fun bar(): ArrayList<Int> {
    return arrayListOf<Int>()
  }

  override fun bar2(): HashSet<Any?> {
    return hashSetOf<Any?>()
  }

  override fun bar3(): IntArray {
    return intArrayOf()
  }

  override fun bar4(): Array<out String> {
    return arrayOf<String>()
  }

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

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

  override fun foo3(c: IntArray) {
  }

  override fun foo4(d: Array<out String>) {
  }

  override var a: ArrayList<Int>
    override get(): ArrayList<Int> {
      return arrayListOf<Int>()
    }
    override set(value: ArrayList<Int>) {
    }

  override var b: HashSet<Any?>
    override get(): HashSet<Any?> {
      return hashSetOf<Any?>()
    }
    override set(value: HashSet<Any?>) {
    }

  override var c: IntArray
    override get(): IntArray {
      return intArrayOf()
    }
    override set(value: IntArray) {
    }

  override var d: Array<out String>
    override get(): Array<out String> {
      return arrayOf<String>()
    }
    override set(value: Array<out String>) {
    }

}

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

  }

}

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

  }

  override fun bar(): MutableList<Int> {
    return mutableListOf<Int>()
  }

  override fun bar2(): MutableSet<Any> {
    return mutableSetOf<Any>()
  }

  override fun bar3(): IntArray {
    return intArrayOf()
  }

  override fun bar4(): Array<String> {
    return arrayOf<String>(elements = [""])
  }

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

  override fun foo2(c: MutableSet<Any>?) {
  }

  override fun foo3(d: IntArray?) {
  }

  override fun foo4(e: Array<out String>?) {
  }

}

interface KotlinInterface : Java2 {
}

fun test(b: B, c: C, d: D, e: E) {
  b.<set-a>(<set-?> = arrayListOf<Int>(elements = [1]))
  b.<set-b>(<set-?> = hashSetOf<Any?>(elements = [1, "", null]))
  b.<set-c>(<set-?> = intArrayOf(elements = [1]))
  b.<set-d>(<set-?> = arrayOf<String>(elements = [""]))
  b.foo(a = arrayListOf<Int>(elements = [1]))
  b.foo2(b = hashSetOf<Any?>(elements = [1, "", null]))
  b.foo3(c = intArrayOf(elements = [1]))
  b.foo4(d = arrayOf<String>(elements = [""]))
  val k1: List<Int> = b.bar()
  val k2: Set<Any?> = b.bar2()
  val k3: IntArray = b.bar3()
  val k4: Array<out String> = b.bar4()
  c.<set-a>(value = arrayListOf<Int>(elements = [1]))
  c.<set-b>(value = hashSetOf<Any?>(elements = [1, "", null]))
  c.<set-c>(value = intArrayOf(elements = [1]))
  c.<set-d>(value = arrayOf<String>(elements = [""]))
  c.foo(a = arrayListOf<Int>(elements = [1]))
  c.foo2(b = hashSetOf<Any?>(elements = [1, "", null]))
  c.foo3(c = intArrayOf(elements = [1]))
  c.foo4(d = arrayOf<String>(elements = [""]))
  val k5: List<Int> = b.bar()
  val k6: Set<Any?> = b.bar2()
  val k7: IntArray = b.bar3()
  val k8: Array<out String> = b.bar4()
  d.foo(a = arrayListOf<Int>(elements = [1]))
  d.foo2(c = setOf<Int>(element = 1))
  d.foo3(d = intArrayOf(elements = [1]))
  d.foo4(e = arrayOf<String>(elements = [""]))
  val k9: List<Int> = d.bar() /*!! List<@FlexibleNullability Int?> */
  val k10: Set<Any?> = d.bar2() /*!! Set<@FlexibleNullability Any?> */
  val k11: IntArray = d.bar3() /*!! IntArray */
  val k12: Array<out String> = d.bar4() /*!! Array<out @FlexibleNullability String?> */
  e.foo(a = arrayListOf<Int>(elements = [1]))
  e.foo2(c = mutableSetOf<Any>(elements = [1, ""]))
  e.foo3(d = intArrayOf(elements = [1]))
  e.foo4(e = arrayOf<String>(elements = [""]))
  val k13: List<Int> = e.bar()
  val k14: Set<Any?> = e.bar2()
  val k15: IntArray = e.bar3()
  val k16: Array<out String> = e.bar4()
}
