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

  }

}

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

  }

  override fun foo(vararg a: T) {
  }

}

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

  }

}

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

  }

  override fun foo(vararg a: T) {
  }

}

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

  }

}

interface KotlinInterface<T : Any?> {
  abstract fun foo(vararg a: T)

}

fun test(a: A<Int>, b: B<Int?>, c: C<Any>, d: D<Any?>, e: E) {
  a.foo(a = [1, 2])
  a.foo(a = [1, null])
  a.foo(a = [null])
  b.foo(a = [1, 2])
  b.foo(a = [1, null])
  b.foo(a = [null])
  c.foo(a = [1, 2])
  c.foo(a = ["1", "2", null])
  c.foo(a = [null])
  d.foo(a = [1, 2])
  c.foo(a = ["1", "2", null])
  d.foo(a = [null])
  e.foo(a = [1, 2])
  e.foo(a = [1, null])
  e.foo(a = [null])
}
