abstract class B : Java1<Int> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class C : Java1<Int> {
  override var a: Int?
    field = a
    override get
    override set

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

  }

  override fun bar(o: Int?) {
  }

  override fun foo(): Int {
    return 1
  }

}

abstract class D : Java1<Int> {
  override var a: Int?
    field = a
    override get
    override set

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

  }

  override fun bar(o: Int) {
  }

}

class E : Java2<Int> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(o: Int?) {
  }

  override fun foo(): Int {
    return 1
  }

}

abstract class F : Java2<Int> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

abstract class G : Java4<Int> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class H : Java4<Int> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun bar(o: Int?) {
  }

  override fun foo(): Int {
    return 1
  }

}

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

  abstract fun foo(): T

  abstract var a: T
    abstract get
    abstract set

}

interface KotlinInterface<T : Any?> : Java3<T> {
}

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