// Generated from "jsoptional/Main.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 jsoptional

import javaemul.lang.*
import jsinterop.annotations.JsConstructor
import jsinterop.annotations.JsFunction
import jsinterop.annotations.JsMethod
import jsinterop.annotations.JsOptional
import jsinterop.annotations.JsType
import kotlin.Any
import kotlin.Array
import kotlin.Boolean
import kotlin.Double
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.jvm.JvmField
import kotlin.jvm.JvmStatic

open class Main {
 @JsMethod
 open fun method1(i1: Int, @JsOptional d: Double?, @JsOptional i: Int?) {}

 @JsMethod
 open fun method2(s1: String?, @JsOptional d: Double?, vararg i: Boolean?) {
  val i_1: Array<Boolean?>? = i as Array<Boolean?>?
 }

 @JvmField
 internal var f_pp_jsoptional: Function? = Function { s: String?, varargs: Array<*>? ->
  val varargs_1: Array<Any?>? = varargs as Array<Any?>?
  return@Function s
 }

 @JsConstructor
 constructor(@JsOptional a: String?)

 open fun testFunction(f: Function?) {}

 @JsMethod
 open fun testOptionalFunction(@JsOptional f: Function?) {}

 companion object {
  @JvmStatic
  @JsMethod
  fun staticMethod1(i1: Int, @JsOptional d: Double?, @JsOptional i: Int?) {}

  @JvmStatic
  @JsMethod
  fun staticMethod2(s1: String?, @JsOptional d: Double?, vararg i: Boolean?) {
   val i_1: Array<Boolean?>? = i as Array<Boolean?>?
  }
 }

 @JsFunction
 fun interface Function {
  fun f1(@JsOptional s: String?, vararg args: Any?): Any?
 }

 class AFunction internal constructor(): Function {
  override fun f1(@JsOptional i: String?, vararg args: Any?): Any? {
   val args_1: Array<Any?>? = args as Array<Any?>?
   return args_1!![0]
  }
 }

 @JsType
 fun interface I<T> {
  fun m(t: T, @JsOptional o: Any?)
 }

 @JsType
 open class TemplatedSubtype<T: String?> internal constructor(): I<T> {
  override fun m(t: T, @JsOptional o: Any?) {}
 }

 @JsType
 open inner class SpecializedSubtype constructor(@JsOptional a: Any?): I<String?> {
  override fun m(t: String?, @JsOptional o: Any?) {}
 }

 open class NonJsTypeSubtype internal constructor(): I<String?> {
  override fun m(t: String?, @JsOptional o: Any?) {}
 }
}
