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

  }

}

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

  }

}

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

  }

  override fun toByte(): Byte {
    return 1B
  }

}

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

  }

}

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

  }

  override fun toByte(): Byte {
    return 5B
  }

  override fun toShort(): Short {
    return 6S
  }

}

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

  }

}

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

  }

  override fun toFloat(): Float {
    return 1.0F
  }

  override fun toInt(): Int {
    return 1
  }

}

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

  }

}

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

  }

  override fun toLong(): Long {
    return 1L
  }

  override fun toShort(): Short {
    return 1S
  }

}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I) {
  a.toInt() /*~> Unit */
  a.toShort() /*~> Unit */
  b.toByte() /*~> Unit */
  b.toLong() /*~> Unit */
  c.toByte() /*~> Unit */
  c.toInt() /*~> Unit */
  d.toShort() /*~> Unit */
  d.toInt() /*~> Unit */
  e.toFloat() /*~> Unit */
  e.toByte() /*~> Unit */
  g.toInt() /*~> Unit */
  g.toByte() /*~> Unit */
  h.toDouble() /*~> Unit */
  h.toByte() /*~> Unit */
  i.toByte() /*~> Unit */
  i.toShort() /*~> Unit */
}
