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

  }

}

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

  }

  override fun foo(t: Number) {
  }

}

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

  }

}

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

  }

  override fun bar(): Int? {
    return 6
  }

}

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

  }

}

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

  }

  override fun foo(t: Number) {
  }

}

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

  }

}

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

  }

  override fun bar(): Number {
    return 1
  }

}

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

  }

}

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

  }

  override fun foo(t: Int?) {
  }

}

class K : Java6 {
  constructor() /* primary */ {
    super/*Java6*/()
    /* <init>() */

  }

}

open class KotlinClass<T : Number> {
  open val a: T?
    field = null
    open get

  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  open fun bar(): T? {
    return <this>.<get-a>()
  }

  open fun foo(t: T) {
  }

}

open class KotlinClass2<T> where T : Number, T : Comparable<T> {
  open val a: T?
    field = null
    open get

  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  open fun bar(): T? {
    return <this>.<get-a>()
  }

  open fun foo(t: T) {
  }

}

class L : Java6 {
  constructor() /* primary */ {
    super/*Java6*/()
    /* <init>() */

  }

  override fun bar(): Number {
    return 4
  }

}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L) {
  a.foo(t = 1)
  a.foo(t = 1.1)
  a.bar() /*~> Unit */
  b.foo(t = 1.2)
  b.foo(t = 1)
  b.bar() /*~> Unit */
  c.foo(t = null)
  c.foo(t = 1)
  c.bar() /*~> Unit */
  d.foo(t = null)
  d.foo(t = 1)
  d.bar() /*~> Unit */
  e.foo(t = 1)
  e.foo(t = "")
  e.bar() /*~> Unit */
  f.foo(t = 2)
  f.foo(t = "")
  f.bar() /*~> Unit */
  g.foo(t = 2)
  g.bar() /*~> Unit */
  h.foo(t = 2)
  h.bar() /*~> Unit */
  i.foo(t = 2)
  i.bar() /*~> Unit */
  j.foo(t = null)
  j.foo(t = 1)
  j.bar() /*~> Unit */
  k.foo(t = 1)
  k.bar() /*~> Unit */
  l.foo(t = 4)
  l.bar() /*~> Unit */
}
