// Generated from "j2ktnewobjcname/ClassExample.java"
@file:OptIn(ExperimentalObjCName::class)
@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 j2ktnewobjcname

import javaemul.lang.*
import java.util.AbstractList
import java.util.HashMap
import java.util.LinkedList
import java.util.StringJoiner
import kotlin.Any
import kotlin.Boolean
import kotlin.Byte
import kotlin.Char
import kotlin.Double
import kotlin.Float
import kotlin.Int
import kotlin.Long
import kotlin.Number
import kotlin.OptIn
import kotlin.Short
import kotlin.String
import kotlin.Suppress
import kotlin.collections.HashSet
import kotlin.collections.MutableCollection
import kotlin.collections.MutableIterable
import kotlin.collections.MutableIterator
import kotlin.collections.MutableList
import kotlin.collections.MutableListIterator
import kotlin.collections.MutableMap
import kotlin.collections.MutableSet
import kotlin.experimental.ExperimentalObjCName
import kotlin.jvm.JvmField
import kotlin.jvm.JvmStatic
import kotlin.native.ObjCName

@ObjCName("J2ktNewClassExample", swiftName = "NewClassExample", exact = true)
open class ClassExample {
 @JvmField
 @ObjCName("publicField_")
 var publicField: Int = 0

 @JvmField
 @ObjCName("protectedField_")
 var protectedField: Int = 0

 @JvmField
 internal var packagePrivateField_pp_j2ktnewobjcname: Int = 0

 private var privateField: Int = 0

 constructor()

 constructor(
  @ObjCName("Integer") i: Int
 )

 constructor(i: Int, s: String)

 @ObjCName("J2ktNewClassExampleCompanion", swiftName = "NewClassExampleCompanion", exact = true)
 companion object {
  @JvmField
  @ObjCName("publicStaticField_")
  var publicStaticField: Int = 0

  @JvmField
  @ObjCName("protectedStaticField_")
  var protectedStaticField: Int = 0

  @JvmField
  internal var packagePrivateStaticField_pp_j2ktnewobjcname: Int = 0

  private var privateStaticField: Int = 0

  @JvmField
  @ObjCName("objectField_")
  var objectField: Any? = null

  @JvmField
  @ObjCName("stringField_")
  var stringField: String? = null

  @JvmField
  @ObjCName("selfField_")
  var selfField: ClassExample? = null

  @JvmField
  @ObjCName("iterable_")
  var iterable: MutableIterable<String>? = null

  @JvmField
  @ObjCName("iterator_")
  var iterator: MutableIterator<String>? = null

  @JvmField
  @ObjCName("collection_")
  var collection: MutableCollection<Any?>? = null

  @JvmField
  @ObjCName("val_")
  var `val`: Int = 0

  @JvmField
  @ObjCName("var_")
  var `var`: Int = 0

  @JvmField
  @ObjCName("fun_")
  var `fun`: Int = 0

  @JvmField
  @ObjCName("alloc___")
  var alloc: Int = 0

  @JvmField
  @ObjCName("init___")
  var init: Int = 0

  @JvmField
  @ObjCName("extern___")
  var extern: Int = 0

  @JvmField
  @ObjCName("inline___")
  var inline: Int = 0

  @JvmField
  @ObjCName("NULL___")
  var NULL: Int = 0

  @JvmField
  @ObjCName("allocFoo_")
  var allocFoo: Int = 0

  @JvmField
  @ObjCName("initFoo_")
  var initFoo: Int = 0

  @JvmField
  @ObjCName("newFoo_")
  var newFoo: Int = 0

  @ObjCName("BOOLEAN_FALSE_")
  const val BOOLEAN_FALSE: Boolean = false

  @ObjCName("BOOLEAN_TRUE_")
  const val BOOLEAN_TRUE: Boolean = true

  @ObjCName("CHAR_")
  const val CHAR: Char = 'a'

  @ObjCName("CHAR_APOSTROPHE_")
  const val CHAR_APOSTROPHE: Char = '\''

  @ObjCName("CHAR_BACKSLASH_")
  const val CHAR_BACKSLASH: Char = '\\'

  @ObjCName("CHAR_UNICODE_")
  const val CHAR_UNICODE: Char = '\u1231'

  @ObjCName("BYTE_")
  const val BYTE: Byte = 123.toByte()

  @ObjCName("SHORT_")
  const val SHORT: Short = 123.toShort()

  @ObjCName("INT_")
  const val INT: Int = 123

  @ObjCName("INT_MIN_VALUE_")
  const val INT_MIN_VALUE: Int = -2147483647 - 1

  @ObjCName("INT_MAX_VALUE_")
  const val INT_MAX_VALUE: Int = 2147483647

  @ObjCName("LONG_")
  const val LONG: Long = 123L

  @ObjCName("LONG_MIN_VALUE_")
  const val LONG_MIN_VALUE: Long = -9223372036854775807L - 1L

  @ObjCName("LONG_MAX_VALUE_")
  const val LONG_MAX_VALUE: Long = 9223372036854775807L

  @ObjCName("FLOAT_")
  const val FLOAT: Float = 123.0f

  @ObjCName("FLOAT_ZER0_")
  const val FLOAT_ZER0: Float = 0.0f

  @ObjCName("FLOAT_NEGATIVE_ZERO_")
  const val FLOAT_NEGATIVE_ZERO: Float = -0.0f

  @ObjCName("FLOAT_NAN_")
  const val FLOAT_NAN: Float = (0.0f / 0.0f)

  @ObjCName("FLOAT_NEGATIVE_INFINITY_")
  const val FLOAT_NEGATIVE_INFINITY: Float = (-1.0f / 0.0f)

  @ObjCName("FLOAT_POSITIVE_INFINITY_")
  const val FLOAT_POSITIVE_INFINITY: Float = (1.0f / 0.0f)

  @ObjCName("FLOAT_MIN_VALUE_")
  const val FLOAT_MIN_VALUE: Float = 1.4E-45f

  @ObjCName("FLOAT_MIN_NORMAL_")
  const val FLOAT_MIN_NORMAL: Float = 1.1754944E-38f

  @ObjCName("FLOAT_MIN_EXPONENT_")
  const val FLOAT_MIN_EXPONENT: Float = -126.0f

  @ObjCName("FLOAT_MAX_VALUE_")
  const val FLOAT_MAX_VALUE: Float = 3.4028235E38f

  @ObjCName("FLOAT_MAX_EXPONENT_")
  const val FLOAT_MAX_EXPONENT: Float = 127.0f

  @ObjCName("DOUBLE_")
  const val DOUBLE: Double = 123.0

  @ObjCName("DOUBLE_ZER0_")
  const val DOUBLE_ZER0: Double = 0.0

  @ObjCName("DOUBLE_NEGATIVE_ZERO_")
  const val DOUBLE_NEGATIVE_ZERO: Double = -0.0

  @ObjCName("DOUBLE_NAN_")
  const val DOUBLE_NAN: Double = (0.0 / 0.0)

  @ObjCName("DOUBLE_NEGATIVE_INFINITY_")
  const val DOUBLE_NEGATIVE_INFINITY: Double = (-1.0 / 0.0)

  @ObjCName("DOUBLE_POSITIVE_INFINITY_")
  const val DOUBLE_POSITIVE_INFINITY: Double = (1.0 / 0.0)

  @ObjCName("DOUBLE_MIN_VALUE_")
  const val DOUBLE_MIN_VALUE: Double = 4.9E-324

  @ObjCName("DOUBLE_MIN_NORMAL_")
  const val DOUBLE_MIN_NORMAL: Double = 2.2250738585072014E-308

  @ObjCName("DOUBLE_MIN_EXPONENT_")
  const val DOUBLE_MIN_EXPONENT: Double = -1022.0

  @ObjCName("DOUBLE_MAX_VALUE_")
  const val DOUBLE_MAX_VALUE: Double = 1.7976931348623157E308

  @ObjCName("DOUBLE_MAX_EXPONENT_")
  const val DOUBLE_MAX_EXPONENT: Double = 1023.0

  @ObjCName("STRING_")
  const val STRING: String = "foo"

  @JvmStatic
  @ObjCName("newFoo")
  fun foo() {}

  @JvmStatic
  @ObjCName("newProtectedFoo")
  fun protectedFoo() {}

  @JvmStatic
  @ObjCName("newFooFrom")
  fun newFoo(
   @ObjCName("Int") i: Int
  ) {}

  @JvmStatic
  @ObjCName("newFooFrom")
  fun foo(
   @ObjCName("Int") s: String,
   @ObjCName("withInteger") i: Int
  ) {}

  @JvmStatic
  fun foo(s: String, i: String) {}

  @JvmStatic
  fun `val`() {}

  @JvmStatic
  fun `var`() {}

  @JvmStatic
  fun `fun`() {}

  @JvmStatic
  fun alloc() {}

  @JvmStatic
  fun allocBar() {}

  @JvmStatic
  fun allocatedBar() {}

  @JvmStatic
  fun init() {}

  @JvmStatic
  fun initialize() {}

  @JvmStatic
  fun initBar() {}

  @JvmStatic
  fun newBar() {}

  @JvmStatic
  fun copyBar() {}

  @JvmStatic
  fun mutableCopyBar() {}

  @JvmStatic
  fun reservedParamNames(extern: Int, struct: Int, register: Int, inline: Int) {}

  @JvmStatic
  fun nativeTypes(s: String, o: Any, n: Number): String {
   return s
  }

  @JvmStatic
  fun numberType(l: Number) {}

  @JvmStatic
  fun booleanType(l: Boolean) {}

  @JvmStatic
  fun characterType(l: Char) {}

  @JvmStatic
  fun byteType(l: Byte) {}

  @JvmStatic
  fun shortType(l: Short) {}

  @JvmStatic
  fun integerType(l: Int) {}

  @JvmStatic
  fun longType(l: Long) {}

  @JvmStatic
  fun floatType(l: Float) {}

  @JvmStatic
  fun doubleType(l: Double) {}

  @JvmStatic
  fun iterableType(l: MutableIterable<String>) {}

  @JvmStatic
  fun iteratorType(l: MutableIterator<String>) {}

  @JvmStatic
  fun listIteratorType(l: MutableListIterator<String>) {}

  @JvmStatic
  fun collectionType(l: MutableCollection<String>) {}

  @JvmStatic
  fun listType(l: MutableList<String>) {}

  @JvmStatic
  fun setType(l: MutableSet<String>) {}

  @JvmStatic
  fun mapType(l: MutableMap<String, String>) {}

  @JvmStatic
  fun linkedListType(l: LinkedList<String>) {}

  @JvmStatic
  fun hashSetType(l: HashSet<String>) {}

  @JvmStatic
  fun hashMapType(l: HashMap<String, String>) {}

  @JvmStatic
  fun nonNativeJavaType(l: StringJoiner) {}
 }

 open class SubCollection<E>: AbstractList<E>() {
  override fun get(index: Int): E {
   return null as E
  }

  override val size: Int
   get() {
    return 0
   }

  companion object {
   @JvmStatic
   fun staticMethod() {}
  }

  open class InnerClass {
   companion object {
    @JvmStatic
    fun staticMethod() {}
   }
  }
 }

 open class NonCollection {
  companion object {
   @JvmStatic
   fun staticMethod() {}
  }
 }

 open class PackagePrivateClass internal constructor() {
  @JvmField
  @ObjCName("publicField_")
  var publicField: Int = 0

  open fun publicMethod() {}
 }

 open class ProtectedClass {
  @JvmField
  @ObjCName("publicField_")
  var publicField: Int = 0

  open fun publicMethod() {}
 }

 open class PrivateClass internal constructor() {
  @JvmField
  @ObjCName("publicField_")
  var publicField: Int = 0

  open fun publicMethod() {}
 }
}
