class A : Java1<Int> {
  constructor() /* primary */ {
    super/*Java1*/<Int>()
    /* <init>() */

  }

}

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

  }

}

class C : Java2 {
  constructor() /* primary */ {
    super/*Java2*/()
    /* <init>() */

  }

}

class D : Java3<Int?> {
  constructor() /* primary */ {
    super/*Java3*/<Int?>()
    /* <init>() */

  }

}

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

  }

}

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

  }

}

class G<T : Number> : Java4<T> {
  constructor() /* primary */ {
    super/*Java4*/<T>()
    /* <init>() */

  }

}

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