// Generated from "jsconstructor/JsConstructorClass.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 jsconstructor

import javaemul.lang.*
import jsinterop.annotations.JsConstructor
import jsinterop.annotations.JsType
import kotlin.Any
import kotlin.Int
import kotlin.Suppress
import kotlin.jvm.JvmField
import kotlin.jvm.JvmStatic

open class JsConstructorClass {
 open class A {
  @JvmField
  var fA: Int = 1

  constructor(x: Int) {
   this.fA = x
  }

  constructor()
 }

 open class B: A {
  @JvmField
  var fB: Int = 2

  @JsConstructor
  constructor(x: Int): super(
   x + 1,
  ) {
   this.fB = 3
  }

  constructor(): this(10) {
   this.fB = 4
  }

  constructor(x: Int, y: Int): this(
   x + y,
  ) {
   this.fB = x * y
  }
 }

 open class C: B {
  @JvmField
  var fC: Int = 1

  @JsConstructor
  constructor(x: Int): super(
   x * 2,
  ) {
   this.fC = 6
  }

  constructor(x: Int, y: Int): this(
   x + y,
  ) {
   this.fC = 7
  }
 }

 open class D: B {
  @JvmField
  var fD: Int = 8

  @JsConstructor
  constructor(): super(9) {
   this.fD = 10
  }

  constructor(x: Int): this() {
   this.fD = x
  }
 }

 open class E: C {
  @JvmField
  var fE: Int = 11

  @JsConstructor
  constructor(): super(10) {
   this.fE = 12
  }
 }

 open class F: C {
  @JvmField
  var fF: Int = 13

  @JsConstructor
  constructor(x: Int): super(
   x + 2,
  ) {
   this.fF = x + 3
  }
 }

 @JsType
 open class G

 open class H: G {
  @JsConstructor
  constructor()
 }

 open class Outer {
  open inner class I @JsConstructor constructor(): G()
 }

 open class Varargs: A {
  @JsConstructor
  constructor(vararg args: Int): super(
   args!![1],
  )
 }

 open class SubVarargs: Varargs {
  @JsConstructor
  constructor(i: Any?, vararg args: Int): super(
   *args!!,
  )

  constructor(j: Int): this(
   Any(),
   j,
  )

  companion object {
   @JvmStatic
   internal fun subNativeInvocation_pp_jsconstructor() {
    val unusedS1: SubVarargs = SubVarargs(2)
    val unusedS2: SubVarargs = SubVarargs(
     Any(),
     1,
     2,
     3,
    )
   }
  }
 }

 open inner class InstanceVarargs @JsConstructor constructor(vararg args: Int): A(
  args!![1],
 )

 open class RegularType {
  constructor(b: Any?)
 }

 open class JsConstructorSubtypeOfRegularType: RegularType {
  @JsConstructor
  constructor(`object`: Any?): super(`object`)

  constructor(): this(
   Any(),
  )
 }

 open inner class JsConstructorClassWithExplicitConstructor @JsConstructor constructor(i: Int)

 open inner class JsConstructorSubclass @JsConstructor constructor(): JsConstructorClass.JsConstructorClassWithExplicitConstructor(1) {
  init {
   var i: Int = 0
   SWITCH@ do {
    CASE@ do {
     CASE_1@ do {
      do {
       when (0) {
        0 -> {
         break
        }
        1 -> {
         break@CASE_1
        }
        else -> {
         break@CASE
        }
       }
       break@SWITCH
      } while (false)
      i = 0
     } while (false)
     i = 2
    } while (false)
   } while (false)
  }
 }
}
