class GenericInv<T : Number> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class GenericIn<in T : Number> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class GenericOut<out T : Number> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

fun testReturnsRawGenericInv(j: JRaw): @FlexibleNullability @RawType GenericInv<Number>? {
  return j.returnsRawGenericInv()
}

fun testReturnsRawGenericIn(j: JRaw): @FlexibleNullability @RawType GenericIn<Number>? {
  return j.returnsRawGenericIn()
}

fun testReturnsRawGenericOut(j: JRaw): @FlexibleNullability @RawType GenericOut<Number>? {
  return j.returnsRawGenericOut()
}

class KRaw : JRaw {
  constructor(j: JRaw) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  private /* final field */ val $$delegate_0: JRaw = j
  override fun returnsRawGenericIn(): @FlexibleNullability @RawType GenericIn<Number>? {
    return <this>.#$$delegate_0.returnsRawGenericIn()
  }

  override fun returnsRawGenericInv(): @FlexibleNullability @RawType GenericInv<Number>? {
    return <this>.#$$delegate_0.returnsRawGenericInv()
  }

  override fun returnsRawGenericOut(): @FlexibleNullability @RawType GenericOut<Number>? {
    return <this>.#$$delegate_0.returnsRawGenericOut()
  }

  override fun returnsRawList(): @FlexibleNullability @FlexibleMutability @RawType MutableList<Any?>? {
    return <this>.#$$delegate_0.returnsRawList()
  }

  override fun takesRawGenericIn(g: @FlexibleNullability @RawType GenericIn<Number>?) {
    <this>.#$$delegate_0.takesRawGenericIn(g = g)
  }

  override fun takesRawGenericInv(g: @FlexibleNullability @RawType GenericInv<Number>?) {
    <this>.#$$delegate_0.takesRawGenericInv(g = g)
  }

  override fun takesRawGenericOut(g: @FlexibleNullability @RawType GenericOut<Number>?) {
    <this>.#$$delegate_0.takesRawGenericOut(g = g)
  }

  override fun takesRawList(list: @FlexibleNullability @FlexibleMutability @RawType MutableList<Any?>?) {
    <this>.#$$delegate_0.takesRawList(list = list)
  }

}
