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

  }

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

}

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

  }

}

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

  }

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

}

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

  }

}

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

  }

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

}

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