interface IFoo {

}

class Derived1 : JFieldOwner, IFoo {
  constructor() /* primary */ {
    super/*JFieldOwner*/()
    /* <init>() */

  }

}

class Derived2 : JFieldOwner, IFoo {
  constructor() /* primary */ {
    super/*JFieldOwner*/()
    /* <init>() */

  }

}

open class Mid : JFieldOwner {
  constructor() /* primary */ {
    super/*JFieldOwner*/()
    /* <init>() */

  }

}

class DerivedThroughMid1 : Mid, IFoo {
  constructor() /* primary */ {
    super/*Mid*/()
    /* <init>() */

  }

}

class DerivedThroughMid2 : Mid, IFoo {
  constructor() /* primary */ {
    super/*Mid*/()
    /* <init>() */

  }

}

fun test(b: Boolean) {
  val d1: Derived1 = Derived1()
  val d2: Derived2 = Derived2()
  val k: Any = when {
    b -> d1
    else -> d2
  }
  k /*as JFieldOwner */super.#f = 42
  k /*as JFieldOwner */super.#f /*~> Unit */
  val md1: DerivedThroughMid1 = DerivedThroughMid1()
  val md2: DerivedThroughMid2 = DerivedThroughMid2()
  val mk: Any = when {
    b -> md1
    else -> md2
  }
  mk /*as Mid */super.#f = 44
  mk /*as Mid */super.#f /*~> Unit */
}
