abstract class B<T : Any?> : Java1<T>, Java2<T> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class C<T : Any?> : Java1<T>, Java2<T> {
  override var a: T
    field = a
    override get
    override set

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

  }

  override fun bar(o: T) {
  }

  override fun foo(): T {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

abstract class D<T : Any?> : Java2<T>, Kotlin<T> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class E<T : Any?> : Java2<T>, Kotlin<T> {
  override var a: T
    field = a
    override get
    override set

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

  }

  override fun bar(o: T) {
  }

  override fun foo(): T {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

abstract class F<T : Any?> : Java3<T>, Kotlin2<T> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class G<T : Any?> : Java3<T>, Kotlin2<T> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(o: T) {
  }

  override fun foo(): T {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

abstract class H<T : Any?> : Java3<T>, Java4<T> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class I<T : Any?> : Java3<T>, Java4<T> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(o: T) {
  }

  override fun foo(): T {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

interface A<T : Any?> {
  abstract fun bar(o: T)

  abstract fun foo(): T

  abstract var a: T
    abstract get
    abstract set

}

interface Kotlin<T : Any?> {
  abstract fun bar(o: T)

  abstract fun foo(): T

}

interface Kotlin2<T : Any?> : Java1<T> {
}

fun test(b: B<Int>, c: C<Any>, d: D<Any?>, e: E<Int>, f: F<Any>, g: G<String>, h: H<Any?>, i: I<String?>) {
  val k: Int = b.<get-a>() /*!! Int */
  b.<set-a>(<set-?> = 1)
  val k2: Unit = b.bar(o = 1)
  val k3: Unit = b.bar(o = null)
  val k4: Int = b.foo() /*!! Int */
  val k5: Any = c.<get-a>()
  c.<set-a>(<set-?> = "")
  val k6: Unit = c.bar(o = 1)
  val k7: Unit = c.bar(o = "")
  val k8: Any = c.foo()
  val k9: Any? = d.<get-a>()
  d.<set-a>(<set-?> = null)
  val k10: Unit = d.bar(o = 1)
  val k11: Unit = d.bar(o = "")
  val k12: Unit = d.bar(o = null)
  val k13: Any? = d.foo()
  val k14: Int = e.<get-a>()
  e.<set-a>(<set-?> = 1)
  val k15: Unit = e.bar(o = 1)
  val k16: Int = e.foo()
  val k17: Unit = f.bar(o = 1)
  val k18: Unit = f.bar(o = "")
  val k19: Unit = f.bar(o = null)
  val k20: Any = f.foo() /*!! Any */
  val k21: Unit = g.bar(o = "")
  val k22: String = g.foo()
  val k23: Unit = h.bar(o = 1)
  val k24: Unit = h.bar(o = "")
  val k25: Unit = h.bar(o = null)
  val k26: Any? = h.foo()
  val k27: Unit = i.bar(o = "")
  val k28: Unit = i.bar(o = null)
  val k29: String? = i.foo()
}
