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

  }

  open fun foo(a: Int = 0, b: Any? = "string", c: Nothing? = null) {
  }

}

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

  }

}

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

  }

  override fun foo(a: Int?, b: Any?, c: Any?) {
  }

}

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

  }

  override fun foo(a: Int, b: Any?, c: Nothing?) {
  }

}

interface KotlinInterface {
  fun foo(a: Int = 1, b: Any? = "string2", c: Nothing? = null) {
  }

}

fun test(b: B, c: C, d: D) {
  b.foo()
  b.foo(a = 1, b = null, c = null)
  b.foo(a = 1, b = "", c = "")
  c.foo()
  c.foo(a = null, b = "", c = null)
  c.foo(a = 1, b = "", c = null)
  d.foo()
  d.foo(a = 1, b = null, c = null)
}
