fun test3(f1: Function1<String, String>, f2: Function1<Int, String>): D<@FlexibleNullability Int?, @FlexibleNullability String?> {
  return C<@FlexibleNullability String?>(jxx = f1 /*-> @FlexibleNullability J<@FlexibleNullability String?, @FlexibleNullability String?>? */).D<@FlexibleNullability Int?>(jxy = f2 /*-> @FlexibleNullability J<@FlexibleNullability String?, @FlexibleNullability Int?>? */)
}

class Outer<T1 : Any?> {
  constructor(j11: J<T1, T1>) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val j11: J<T1, T1>
    field = j11
    get

  inner class Inner<T2 : Any?> {
    constructor(j12: J<T1, T2>) /* primary */ {
      super/*Any*/()
      /* <init>() */

    }

    val j12: J<T1, T2>
      field = j12
      get

  }

}

fun test4(f: Function1<String, String>, g: Function1<Any, String>): Inner<@FlexibleNullability Any?, @FlexibleNullability String?> {
  return Outer<@FlexibleNullability String?>(j11 = f /*-> J<@FlexibleNullability String?, @FlexibleNullability String?> */).Inner<@FlexibleNullability Any?>(j12 = g /*-> J<@FlexibleNullability String?, @FlexibleNullability Any?> */)
}

fun testGenericJavaCtor1(f: Function1<String, Int>): G<@FlexibleNullability String?> {
  return G<@FlexibleNullability String?, @FlexibleNullability Int?>(x = f /*-> @FlexibleNullability J<@FlexibleNullability Int?, @FlexibleNullability String?>? */)
}

fun testGenericJavaCtor2(x: Any) {
  x as Function1<String, Int> /*~> Unit */
  G<@FlexibleNullability String?, @FlexibleNullability Int?>(x = x /*as Function1<String, Int> */ /*-> @FlexibleNullability J<@FlexibleNullability Int?, @FlexibleNullability String?>? */) /*~> Unit */
}
