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

  }

}

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

  }

}

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

  }

  override fun foo2() {
  }

  override fun foo3() {
  }

}

abstract class D : Java1, Java3 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

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

  }

  override fun foo() {
  }

  override fun foo2() {
  }

  override fun foo3() {
  }

}

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

  }

}

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

  }

  override fun foo2() {
  }

  override fun foo3() {
  }

}

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

  }

}

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

  }

  override fun foo() {
  }

  override fun foo2() {
  }

  override fun foo3() {
  }

}

interface KotlinInterface {
  abstract fun foo()

  abstract fun foo2()

  abstract fun foo3()

}

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