class A : Java1, Java2, KotlinInterface {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  fun test1() {
    return <this>.foo(t = 1)
  }

  fun test2(): Int {
    return <this>.bar<Int>()
  }

  fun test3() {
    return <this>.foo<String>(t = "")
  }

  fun test4() {
    return <this>.foo(t = 1.5)
  }

  fun test5() {
    return <this>.foo(t = 1.5, t2 = 8)
  }

}

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

  }

  fun test1() {
    return <this>.foo(t = 1)
  }

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

  fun test3(): @FlexibleNullability Number? {
    return <this>.bar()
  }

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

  fun test5() {
    return <this>.foo(t = 1.5)
  }

  fun test6() {
    return <this>.foo(t = 1.5, t2 = 8)
  }

  fun test7() {
    return <this>.foo(t = 1, t2 = 8)
  }

}

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

  }

  fun test1() {
    return foo<@FlexibleNullability Int?>(t = 1)
  }

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

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

  fun test4() {
    return foo<@FlexibleNullability Double?>(t = 1.5)
  }

  fun test5() {
    return foo<Any?>(t = 1.5, t2 = 8)
  }

  fun test6() {
    return foo<@FlexibleNullability Int?>(t = 1, t2 = 8)
  }

}

class D : Java4, Java2 {
  constructor() /* primary */ {
    super/*Java4*/()
    /* <init>() */

  }

  fun test1() {
    return foo<@FlexibleNullability Int?>(t = 1)
  }

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

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

  fun test4() {
    return foo<@FlexibleNullability Double?>(t = 1.5)
  }

  fun test5() {
    return foo<Any?>(t = 1.5, t2 = 8)
  }

  fun test6() {
    return foo<@FlexibleNullability Int?>(t = 1, t2 = 8)
  }

}

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

  }

}

interface KotlinInterface {
  fun <T : Any?> bar(): T {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

  fun foo(t: Number) {
  }

  fun foo(t: Number, t2: Int = 7) {
  }

  fun <T : Any?> foo(t: T) {
  }

}

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