abstract class C : Java1 {
  override val a: Nothing
    field = a
    override get

  override val b: List<Nothing>
    field = b
    override get

  constructor(a: Nothing, b: List<Nothing>) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar2(): Nothing? {
    return null
  }

  override fun foo(a: Nothing) {
  }

}

interface A {
  abstract fun bar(): Nothing

  abstract fun bar2(): Nothing?

  abstract fun foo(a: Nothing)

  abstract fun foo2(a: Nothing?)

  abstract val a: Nothing
    abstract get

  abstract val b: List<Nothing>
    abstract get

  abstract val c: Nothing?
    abstract get

  abstract val d: List<Nothing?>
    abstract get

}

interface B : Java1 {
}

fun test(b: B, c: C) {
  val k: Nothing = b.<get-a>()
  b.foo(a = k)
  val k2: Nothing = b.bar()
  val k3: List<Nothing> = b.<get-b>()
  val k4: Nothing? = b.<get-c>()
  b.foo2(a = k4)
  val k5: Nothing? = b.bar2()
  val k6: List<Nothing?> = b.<get-d>()
  val k7: Nothing = c.<get-a>()
  c.foo(a = k)
  val k8: Nothing = c.bar()
  val k9: List<Nothing> = c.<get-b>()
  val k10: Nothing? = c.<get-c>()
  c.foo2(a = k4)
  val k11: Nothing? = c.bar2()
  val k12: List<Nothing?> = c.<get-d>()
}
