class A<R : Any?> : Java1<R>, Java2<R> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(o: R) {
  }

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

}

class B<R : Any?> : Java3<R>, Java1<R> {
  constructor() /* primary */ {
    super/*Java3*/<@FlexibleNullability R?>()
    /* <init>() */

  }

  override fun bar(o: R) {
  }

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

}

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

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

  }

  override fun bar(o: R) {
  }

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

}

class D<R : Any?> : Java1<R>, Java2<R>, KotlinInterface<R> {
  override var a: R
    field = a
    override get
    override set

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

  }

  override fun bar(o: R) {
  }

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

}

class E<R : Any?> : Java3<R>, Java1<R>, Java2<R> {
  constructor() /* primary */ {
    super/*Java3*/<@FlexibleNullability R?>()
    /* <init>() */

  }

  override fun bar(o: R) {
    super<Java3>.bar(o = o)
  }

  override fun foo(): R {
    return super<Java3>.foo()
  }

}

class F<R : Any?> : Java1<R>, KotlinInterface2<R>, KotlinInterface<R> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(o: R) {
  }

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

  override var a: R
    override get(): R {
      return CHECK_NOT_NULL<Nothing>(arg0 = null)
    }
    override set(value: R) {
    }

}

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

  abstract fun foo(): T

  abstract var a: T
    abstract get
    abstract set

}

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

  abstract fun foo(): T

  abstract var a: T
    abstract get
    abstract set

}

fun test(a: A<Int>, b: B<Int>, c: C<String>, d: D<Int>, e: E<Int>, f: F<Int>) {
  val k: Int = a.foo()
  val k2: Unit = a.bar(o = 1)
  val k3: Int = b.foo()
  val k4: Unit = b.bar(o = 1)
  val k5: String = c.foo()
  val k6: Unit = c.bar(o = "")
  val k7: String = c.<get-a>()
  c.<set-a>(<set-?> = "")
  val k8: Int = d.foo()
  val k9: Unit = d.bar(o = 1)
  val k10: Int = d.<get-a>()
  d.<set-a>(<set-?> = 1)
  val k11: Int = e.foo()
  val k12: Unit = e.bar(o = 1)
  val k13: Int = e(super<E>).#a /*!! Int */
  e(super<E>).#a = 1
  val k14: Int = f.foo()
  val k15: Unit = f.bar(o = 1)
  val k16: Int = f.<get-a>()
  f.<set-a>(value = 1)
}
