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: JFieldOwner = when {
    b -> d1
    else -> d2
  }
  k.#f = 42
  k.#f /*~> Unit */
  val md1: DerivedThroughMid1 = DerivedThroughMid1()
  val md2: DerivedThroughMid2 = DerivedThroughMid2()
  val mk: Mid = when {
    b -> md1
    else -> md2
  }
  mk.#f = 44
  mk.#f /*~> Unit */
}
