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

  }

  open fun test1() {
    return foo(t = 1)
  }

  open fun test2(): Int {
    return bar<@FlexibleNullability Int?>() /*!! Int */
  }

  open fun test3() {
    return foo<@FlexibleNullability String?>(t = "")
  }

  open fun test4() {
    return foo(t = 1, t2 = 1)
  }

}

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

  }

  fun test1() {
    return foo(t = 1)
  }

  fun test2(): Int {
    return bar<@FlexibleNullability Int?>() /*!! Int */
  }

  fun test3() {
    return foo<@FlexibleNullability String?>(t = "")
  }

  fun test4() {
    return foo(t = 1, t2 = 1)
  }

}

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

  }

}

fun test(a: A, b: B, c: C) {
  a.test1()
  a.test2() /*~> Unit */
  a.test3()
  a.test4()
  b.test1()
  b.test2() /*~> Unit */
  b.test3()
  b.test4()
  c.test1()
  c.test2() /*~> Unit */
  c.test3()
  c.test4()
}
