// Generated from "varargs/Varargs.java"
@file:Suppress(
 "ALWAYS_NULL",
 "PARAMETER_NAME_CHANGED_ON_OVERRIDE",
 "SENSELESS_COMPARISON",
 "UNCHECKED_CAST",
 "UNNECESSARY_LATEINIT",
 "UNNECESSARY_NOT_NULL_ASSERTION",
 "UNREACHABLE_CODE",
 "UNUSED_ANONYMOUS_PARAMETER",
 "UNUSED_PARAMETER",
 "UNUSED_VARIABLE",
 "USELESS_CAST",
 "VARIABLE_IN_SINGLETON_WITHOUT_THREAD_LOCAL",
 "VARIABLE_WITH_REDUNDANT_INITIALIZER",
 "REDUNDANT_ELSE_IN_WHEN")

package varargs

import javaemul.lang.*
import java.io.Serializable
import kotlin.Any
import kotlin.Array
import kotlin.Cloneable
import kotlin.Int
import kotlin.Long
import kotlin.Number
import kotlin.String
import kotlin.Suppress
import kotlin.arrayOf
import kotlin.jvm.JvmStatic

open class Varargs {
 private var args: Array<Any?>? = null

 constructor(vararg args: Int)

 constructor(): this(1)

 open fun test(a: Int, vararg args: Any?) {
  val args_1: Array<Any?>? = args as Array<Any?>?
 }

 open fun testCloneable(vararg args: Cloneable?) {
  val args_1: Array<Cloneable?>? = args as Array<Cloneable?>?
 }

 open fun testSerializable(vararg args: Serializable?) {
  val args_1: Array<Serializable?>? = args as Array<Serializable?>?
 }

 open fun testAssignment(vararg args: Any?) {
  val args_1: Array<Any?>? = args as Array<Any?>?
  this.args = args_1
 }

 open fun testLambda(functionalInterface: FunctionalInterface?) {}

 open fun testOverloaded(o: Any?) {}

 open fun testOverloaded(o: String?, vararg rest: Any?) {
  val rest_1: Array<Any?>? = rest as Array<Any?>?
 }

 open fun testOverloaded(l: Long) {}

 open fun testOverloaded(l: Long, vararg rest: Long) {}

 open fun main() {
  val v: Varargs = Varargs()
  v.test(1)
  v.test(
   1,
   Any(),
  )
  v.test(
   1,
   *arrayOf<Any?>(Any()),
  )
  v.test(
   1,
   *arrayOf<Any?>(),
  )
  v.test(
   1,
   *(arrayOf<Array<Any?>?>() as Array<Any?>?)!!,
  )
  v.test(
   1,
   *(Varargs.passthrough<Array<String?>?>(
    arrayOf<String?>("a"),
   ) as Array<Any?>?)!!,
  )
  v.test(
   1,
   *null!!,
  )
  v.testCloneable(
   *(arrayOf<Array<Any?>?>() as Array<Cloneable?>?)!!,
  )
  v.testSerializable(
   *(arrayOf<Array<Any?>?>() as Array<Serializable?>?)!!,
  )
  v.testLambda(
   FunctionalInterface { it: Array<out String?>? ->
    val it_1: Array<String?>? = it as Array<String?>?
    this.args = it_1 as Array<Any?>?
   },
  )
  v.testOverloaded(
   "foo" as Any?,
  )
  v.testOverloaded("foo", "bar")
  v.testOverloaded(
   "foo" as Any,
  )
  v.testOverloaded(1L)
  v.testOverloaded(
   java.lang.Long.valueOf(1L) as Any?,
  )
  v.testOverloaded(1L)
  v.testOverloaded(1L, 2L, 3L)
  v.testOverloaded(1L, 2L, 3L)
 }

 companion object {
  @JvmStatic
  fun <T: Number?> `fun`(vararg elements: T) {
   val elements_1: Array<T>? = elements as Array<T>?
  }

  @JvmStatic
  fun <E: Number?> bar(a: E, b: E) {
   Varargs.`fun`<E>(a, b)
  }

  @JvmStatic
  fun <T> passthrough(o: T): T {
   return o
  }
 }

 fun interface FunctionalInterface {
  fun apply(vararg strings: String?)
 }
}

open class Child: Varargs {
 constructor(): super(1)
}
