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

  }

}

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

  }

  override fun foo(vararg a: String) {
  }

}

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

  }

}

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

  }

  override fun foo(vararg a: Any) {
  }

  override fun foo(vararg a: String?) {
  }

}

interface KotlinInterface {
  abstract fun foo(vararg a: Any)

}

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