// Generated from "nullability/defaultnotnullable/DefaultNotNullable.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 nullability.defaultnotnullable

import javaemul.lang.*
import java.lang.RuntimeException
import java.lang.Void
import java.util.ArrayList
import jsinterop.annotations.JsMethod
import jsinterop.annotations.JsOptional
import kotlin.Any
import kotlin.Array
import kotlin.Boolean
import kotlin.Double
import kotlin.String
import kotlin.Suppress
import kotlin.arrayOf
import kotlin.collections.MutableList
import kotlin.jvm.JvmField
import kotlin.jvm.JvmStatic

open class DefaultNotNullable {
 private var f1: String = "Hello"

 private var f2: String? = null

 private var f3: String? = null

 private var f4: MutableList<String> = ArrayList<String>()

 private var f5: MutableList<String>? = ArrayList<String>()

 private var f6: MutableList<String?> = ArrayList<String?>()

 private var f7: MutableList<String?>? = null

 private var f8: Array<String> = arrayOf<String>()

 private var f9: Array<String?> = arrayOf<String?>()

 private var f10: Array<String>? = arrayOf<String>()

 private var f11: Void? = null

 private var f12: Any = Any()

 private var f13: Any

 private var f14: Any? = null

 constructor() {
  this.f13 = Any()
 }

 open fun m1(a: String, b: MutableList<Double>): String {
  return ""
 }

 open fun m2(a: String?, b: MutableList<Double?>): String? {
  return null
 }

 @JsMethod
 open fun m3(vararg args: String) {
  val args_1: Array<String> = args as Array<String>
 }

 @JsMethod
 open fun m4(a: String, @JsOptional optional: String?): String {
  return null!!
 }

 internal open fun <T: NullableBound<T>?> methodWithNullableBound_pp_nullability_defaultnotnullable() {}

 internal open fun <T: NonNullableBound<T>> methodWithNonNullableBound_pp_nullability_defaultnotnullable() {}

 open fun casts() {
  val listOfString: MutableList<String>? = null as MutableList<String>?
  val nullableListOfString: MutableList<String>? = null as MutableList<String>?
  val listOfNullableString: MutableList<String?>? = null as MutableList<String?>?
  val nullableListOfNullableString: MutableList<String?>? = null as MutableList<String?>?
  val nonNullListOfString: MutableList<String>? = null as MutableList<String>?
  val listOfNonNullString: MutableList<String>? = null as MutableList<String>?
  val nonNullListOfNonNullString: MutableList<String>? = null as MutableList<String>?
 }

 companion object {
  @JvmStatic
  internal fun <N> genericNullableMethod_pp_nullability_defaultnotnullable(o: ParameterizedNullable<N>, n: N?) {
   o.setNullable_pp_nullability_defaultnotnullable(n)
   o.setNonNull_pp_nullability_defaultnotnullable(
    n!!,
   )
   o.setDefaultNullability_pp_nullability_defaultnotnullable(
    n as N,
   )
   o.getNullable_pp_nullability_defaultnotnullable()!!.hashCode()
   o.getNonNullable_pp_nullability_defaultnotnullable().hashCode()
   o.getDefaultNullability_pp_nullability_defaultnotnullable()!!.hashCode()
   o.nullable_pp_nullability_defaultnotnullable = n
   o.nonNullable_pp_nullability_defaultnotnullable = n!!
   o.defaultNullability_pp_nullability_defaultnotnullable = n as N
   o.nullable_pp_nullability_defaultnotnullable!!.hashCode()
   o.nonNullable_pp_nullability_defaultnotnullable.hashCode()
   o.defaultNullability_pp_nullability_defaultnotnullable!!.hashCode()
  }

  @JvmStatic
  internal fun <N: Any> genericNonNullMethod_pp_nullability_defaultnotnullable(o: ParameterizedNonNullable<N>, n: N) {
   o.setNullable_pp_nullability_defaultnotnullable(n)
   o.setNonNull_pp_nullability_defaultnotnullable(n)
   o.setDefaultNullability_pp_nullability_defaultnotnullable(n)
   o.getNullable_pp_nullability_defaultnotnullable()!!.hashCode()
   o.getNonNullable_pp_nullability_defaultnotnullable().hashCode()
   o.getDefaultNullability_pp_nullability_defaultnotnullable().hashCode()
   o.nullable_pp_nullability_defaultnotnullable = n
   o.nonNullable_pp_nullability_defaultnotnullable = n
   o.defaultNullability_pp_nullability_defaultnotnullable = n
   o.nullable_pp_nullability_defaultnotnullable!!.hashCode()
   o.nonNullable_pp_nullability_defaultnotnullable.hashCode()
   o.defaultNullability_pp_nullability_defaultnotnullable.hashCode()
  }

  @JvmStatic
  internal fun <N: Any> genericDefaultNullabilityMethod_pp_nullability_defaultnotnullable(o: ParameterizedDefaultNullability<N>, n: N) {
   o.setNullable_pp_nullability_defaultnotnullable(n)
   o.setNonNull_pp_nullability_defaultnotnullable(n)
   o.setDefaultNullability_pp_nullability_defaultnotnullable(n)
   o.getNullable_pp_nullability_defaultnotnullable()!!.hashCode()
   o.getNonNullable_pp_nullability_defaultnotnullable().hashCode()
   o.getDefaultNullability_pp_nullability_defaultnotnullable().hashCode()
   o.nullable_pp_nullability_defaultnotnullable = n
   o.nonNullable_pp_nullability_defaultnotnullable = n
   o.defaultNullability_pp_nullability_defaultnotnullable = n
   o.nullable_pp_nullability_defaultnotnullable!!.hashCode()
   o.nonNullable_pp_nullability_defaultnotnullable.hashCode()
   o.defaultNullability_pp_nullability_defaultnotnullable.hashCode()
  }

  @JvmStatic
  internal fun parametrizedNullableMethod_pp_nullability_defaultnotnullable(o: ParameterizedNullable<String?>, s: String?) {
   o.setNullable_pp_nullability_defaultnotnullable(s)
   o.setNonNull_pp_nullability_defaultnotnullable(
    s!!,
   )
   o.setDefaultNullability_pp_nullability_defaultnotnullable(s)
   o.getNullable_pp_nullability_defaultnotnullable()!!.length
   o.getNonNullable_pp_nullability_defaultnotnullable().length
   o.getDefaultNullability_pp_nullability_defaultnotnullable()!!.length
   o.nullable_pp_nullability_defaultnotnullable = s
   o.nonNullable_pp_nullability_defaultnotnullable = s!!
   o.defaultNullability_pp_nullability_defaultnotnullable = s
   o.nullable_pp_nullability_defaultnotnullable!!.length
   o.nonNullable_pp_nullability_defaultnotnullable.length
   o.defaultNullability_pp_nullability_defaultnotnullable!!.length
  }

  @JvmStatic
  internal fun parametrizedNonNullMethod_pp_nullability_defaultnotnullable(o: ParameterizedNonNullable<String>, s: String) {
   o.setNullable_pp_nullability_defaultnotnullable(s)
   o.setNonNull_pp_nullability_defaultnotnullable(s)
   o.setDefaultNullability_pp_nullability_defaultnotnullable(s)
   o.getNullable_pp_nullability_defaultnotnullable()!!.length
   o.getNonNullable_pp_nullability_defaultnotnullable().length
   o.getDefaultNullability_pp_nullability_defaultnotnullable().length
   o.nullable_pp_nullability_defaultnotnullable = s
   o.nonNullable_pp_nullability_defaultnotnullable = s
   o.defaultNullability_pp_nullability_defaultnotnullable = s
   o.nullable_pp_nullability_defaultnotnullable!!.length
   o.nonNullable_pp_nullability_defaultnotnullable.length
   o.defaultNullability_pp_nullability_defaultnotnullable.length
  }

  @JvmStatic
  internal fun parametrizedDefaultNullabilityMethod_pp_nullability_defaultnotnullable(o: ParameterizedDefaultNullability<String>, s: String) {
   o.setNullable_pp_nullability_defaultnotnullable(s)
   o.setNonNull_pp_nullability_defaultnotnullable(s)
   o.setDefaultNullability_pp_nullability_defaultnotnullable(s)
   o.getNullable_pp_nullability_defaultnotnullable()!!.length
   o.getNonNullable_pp_nullability_defaultnotnullable().length
   o.getDefaultNullability_pp_nullability_defaultnotnullable().length
   o.nullable_pp_nullability_defaultnotnullable = s
   o.nonNullable_pp_nullability_defaultnotnullable = s
   o.defaultNullability_pp_nullability_defaultnotnullable = s
   o.nullable_pp_nullability_defaultnotnullable!!.length
   o.nonNullable_pp_nullability_defaultnotnullable.length
   o.defaultNullability_pp_nullability_defaultnotnullable.length
  }

  @JvmStatic
  internal fun testListOfWildcard_pp_nullability_defaultnotnullable(l: MutableList<*>) {}

  @JvmStatic
  internal fun testListOfWildcardExtendsDefaultNullabilityObject_pp_nullability_defaultnotnullable(l: MutableList<out Any>) {}

  @JvmStatic
  internal fun testListOfWildcardExtendsNullableObject_pp_nullability_defaultnotnullable(l: MutableList<*>) {}

  @JvmStatic
  internal fun testListOfWildcardExtendsNonNullObject_pp_nullability_defaultnotnullable(l: MutableList<out Any>) {}

  @JvmStatic
  internal fun testListOfWildcardExtendsDefaultNullabilityString_pp_nullability_defaultnotnullable(l: MutableList<out String>) {}

  @JvmStatic
  internal fun testListOfWildcardExtendsNullableString_pp_nullability_defaultnotnullable(l: MutableList<out String?>) {}

  @JvmStatic
  internal fun testListOfWildcardExtendsNonNullString_pp_nullability_defaultnotnullable(l: MutableList<out String>) {}

  @JvmStatic
  internal fun <T: Any> testListOfWildcardExtendsDefaultNullabilityVariable_pp_nullability_defaultnotnullable(l: MutableList<out T>) {}

  @JvmStatic
  internal fun <T: Any> testListOfWildcardExtendsNullableVariable_pp_nullability_defaultnotnullable(l: MutableList<out T?>) {}

  @JvmStatic
  internal fun testListOfWildcardSuperDefaultNullabilityObject_pp_nullability_defaultnotnullable(l: MutableList<in Any>) {}

  @JvmStatic
  internal fun testListOfWildcardSuperNullableObject_pp_nullability_defaultnotnullable(l: MutableList<in Any?>) {}

  @JvmStatic
  internal fun testListOfWildcardSuperNonNullObject_pp_nullability_defaultnotnullable(l: MutableList<in Any>) {}

  @JvmStatic
  internal fun testListOfWildcardSuperDefaultNullabilityString_pp_nullability_defaultnotnullable(l: MutableList<in String>) {}

  @JvmStatic
  internal fun testListOfWildcardSuperNullableString_pp_nullability_defaultnotnullable(l: MutableList<in String?>) {}

  @JvmStatic
  internal fun testListOfWildcardSuperNonNullString_pp_nullability_defaultnotnullable(l: MutableList<in String>) {}

  @JvmStatic
  internal fun <T: Any> testListOfWildcardSuperDefaultNullabilityVariable_pp_nullability_defaultnotnullable(l: MutableList<in T>) {}

  @JvmStatic
  internal fun <T: Any> testListOfWildcardSuperNullableVariable_pp_nullability_defaultnotnullable(l: MutableList<in T?>) {}

  @JvmStatic
  internal fun <T: Any> testCaptureNullabilityCast_pp_nullability_defaultnotnullable(l: MutableList<in T>, t: T?) {
   l.add(
    t as T,
   )
  }

  @JvmStatic
  internal fun testParametrizedTypeNullabilityCast_pp_nullability_defaultnotnullable(c: Consumer<String>, string: String) {
   val localString: String = string
   c.accept(localString)
  }

  @JvmStatic
  internal fun <T: Any> testGenericTypeNullabilityCast_pp_nullability_defaultnotnullable(c: Consumer<T>, element: T) {
   val localElement: T? = element
   c.accept(
    localElement!!,
   )
  }

  @JvmStatic
  internal fun testParametrizedWildcardNullabilityCast_pp_nullability_defaultnotnullable(c: Consumer<in String>, string: String) {
   val localString: String = string
   c.accept(localString)
  }

  @JvmStatic
  internal fun <T: Any> testGenericWildcardNullabilityCast_pp_nullability_defaultnotnullable(c: Consumer<in T>, element: T) {
   val localElement: T? = element
   c.accept(
    localElement as T,
   )
  }

  @JvmStatic
  internal fun testParametrizedArrayNullabilityCast_pp_nullability_defaultnotnullable(array: Array<String>) {
   val localArray: Array<String> = array
  }

  @JvmStatic
  internal fun <T: Any> testGenericArrayNullabilityCast_pp_nullability_defaultnotnullable(array: Array<T>) {
   val localArray: Array<T> = array
  }

  @JvmStatic
  internal fun testLocalNullability_pp_nullability_defaultnotnullable() {
   val stringConsumer: Consumer<String>? = null as Consumer<String>?
   val nullableStringConsumer: Consumer<String?>? = null as Consumer<String?>?
   val nonNullStringConsumer: Consumer<String>? = null as Consumer<String>?
   val b: Boolean = null is Consumer<*>
  }

  @JvmStatic
  internal fun testCodeFragments_pp_nullability_defaultnotnullable() {
   val b: Boolean = true
   val c: Consumer<String>? = if (b) null as Consumer<String>? else null
   val s: Array<String> = arrayOf<String>("1", "2")
  }
 }

 interface ParameterizedInterface<T: Any> {
  fun add(t: T): T

  fun nullableAdd(t: T?): T?
 }

 open inner class ImplementsParameterizedInterface internal constructor(): ParameterizedInterface<String> {
  override fun add(s: String): String {
   return "Hey"
  }

  override fun nullableAdd(s: String?): String? {
   return "Hey"
  }
 }

 interface NullableBound<T: NullableBound<T>?>

 interface NonNullableBound<T: NonNullableBound<T>>

 interface NullableBoundWithNonNullArgument: NullableBound<NullableBoundWithNonNullArgument>

 interface NullableBoundWithNullableArgument: NullableBound<NullableBoundWithNullableArgument?>

 interface NonNullBoundWithNonNullArgument: NonNullableBound<NonNullBoundWithNonNullArgument>

 interface NonNullBoundWithNullableArgument: NonNullableBound<NonNullBoundWithNullableArgument>

 open class ParameterizedDefaultNullability<N: Any> {
  @JvmField
  internal var nullable_pp_nullability_defaultnotnullable: N? = null

  @JvmField
  internal var nonNullable_pp_nullability_defaultnotnullable: N

  @JvmField
  internal var defaultNullability_pp_nullability_defaultnotnullable: N

  internal constructor(n: N) {
   this.nonNullable_pp_nullability_defaultnotnullable = n
   this.defaultNullability_pp_nullability_defaultnotnullable = n
  }

  internal open fun getNullable_pp_nullability_defaultnotnullable(): N? {
   return null
  }

  internal open fun getNonNullable_pp_nullability_defaultnotnullable(): N {
   throw RuntimeException()
  }

  internal open fun getDefaultNullability_pp_nullability_defaultnotnullable(): N {
   return null!!
  }

  internal open fun setNullable_pp_nullability_defaultnotnullable(n: N?) {}

  internal open fun setNonNull_pp_nullability_defaultnotnullable(n: N) {}

  internal open fun setDefaultNullability_pp_nullability_defaultnotnullable(n: N) {}

  @JsMethod(name = "jsOptional")
  internal open fun jsOptional_pp_nullability_defaultnotnullable(a: String, @JsOptional optional: N?) {}
 }

 open class ParameterizedNullable<N> {
  @JvmField
  internal var nullable_pp_nullability_defaultnotnullable: N? = null

  @JvmField
  internal var nonNullable_pp_nullability_defaultnotnullable: N & Any

  @JvmField
  internal var defaultNullability_pp_nullability_defaultnotnullable: N

  internal constructor(n: N) {
   this.nonNullable_pp_nullability_defaultnotnullable = n!!
   this.defaultNullability_pp_nullability_defaultnotnullable = n
  }

  internal open fun getNullable_pp_nullability_defaultnotnullable(): N? {
   return null
  }

  internal open fun getNonNullable_pp_nullability_defaultnotnullable(): N & Any {
   throw RuntimeException()
  }

  internal open fun getDefaultNullability_pp_nullability_defaultnotnullable(): N {
   return null as N
  }

  internal open fun setNullable_pp_nullability_defaultnotnullable(n: N?) {}

  internal open fun setNonNull_pp_nullability_defaultnotnullable(n: N & Any) {}

  internal open fun setDefaultNullability_pp_nullability_defaultnotnullable(n: N) {}
 }

 open class ParameterizedNonNullable<N: Any> {
  @JvmField
  internal var nullable_pp_nullability_defaultnotnullable: N? = null

  @JvmField
  internal var nonNullable_pp_nullability_defaultnotnullable: N

  @JvmField
  internal var defaultNullability_pp_nullability_defaultnotnullable: N

  internal constructor(n: N) {
   this.nonNullable_pp_nullability_defaultnotnullable = n
   this.defaultNullability_pp_nullability_defaultnotnullable = n
  }

  internal open fun getNullable_pp_nullability_defaultnotnullable(): N? {
   return null
  }

  internal open fun getNonNullable_pp_nullability_defaultnotnullable(): N {
   throw RuntimeException()
  }

  internal open fun getDefaultNullability_pp_nullability_defaultnotnullable(): N {
   return null!!
  }

  internal open fun setNullable_pp_nullability_defaultnotnullable(n: N?) {}

  internal open fun setNonNull_pp_nullability_defaultnotnullable(n: N) {}

  internal open fun setDefaultNullability_pp_nullability_defaultnotnullable(n: N) {}
 }

 fun interface Consumer<T> {
  fun accept(t: T)
 }
}
