class Inv<T : Any?> {
  constructor(x: T) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val x: T
    field = x
    get

}

class Test_1<TT : Any?> : JavaClass1<TT> {
  constructor(x: TT) /* primary */ {
    super/*JavaClass1*/<TT>()
    /* <init>() */

  }

  val x: TT
    field = x
    get

  fun test(b: B<TT>) {
    b.output(x = <this>.<get-x>())
  }

}

class Test_2<TT : Any?> : JavaClass2<TT, Inv<TT>> {
  constructor() /* primary */ {
    super/*JavaClass2*/<TT, Inv<TT>>()
    /* <init>() */

  }

  fun process(b: B<TT, Inv<TT>>) {
    b.output(output = Inv<TT>(x = b.element()))
  }

}

fun <R : Any?> test_3(jb: B<R>, r: R) {
  jb.output(x = r)
}
