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

  }

}

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

  }

}

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

  }

  override fun foo2() {
  }

  override fun foo3() {
  }

}

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

  }

  override fun foo() {
  }

}

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

  }

}

abstract class F : Java4 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class G : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

  override fun foo2() {
  }

  override fun foo3() {
  }

}

class H : Java4 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun foo() {
  }

}

class I : Java5 {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

}

class J : Java5 {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

  override fun foo2() {
  }

  override fun foo3() {
  }

}

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

  }

}

interface KotlinInterface : Java2 {
}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J) {
  a.foo()
  a.foo2()
  a.foo3()
  b.foo()
  c.foo()
  c.foo2()
  c.foo3()
  d.foo()
  e.foo()
  e.foo2()
  e.foo3()
  f.foo()
  g.foo()
  g.foo2()
  g.foo3()
  h.foo()
  i.foo()
  i.foo2()
  i.foo3()
  j.foo()
  j.foo2()
  j.foo3()
}
