// Generated from "foreachstatement/ForEachStatement.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 foreachstatement

import javaemul.lang.*
import javaemul.lang.JavaIterator
import javaemul.lang.MutableIterableJvm
import kotlin.Any
import kotlin.Char
import kotlin.Exception
import kotlin.Int
import kotlin.IntArray
import kotlin.Long
import kotlin.Number
import kotlin.String
import kotlin.Suppress
import kotlin.Throwable
import kotlin.arrayOfNulls
import kotlin.collections.MutableIterable
import kotlin.collections.MutableIterator
import kotlin.jvm.Throws

open class ForEachStatement {
 open fun test(iterable: MutableIterable<Throwable?>?) {
  for (t in iterable!!) {
   t!!.toString()
  }
  for (t_1 in arrayOfNulls<Throwable>(10)) {
   t_1!!.toString()
  }
 }

 @Throws(Exception::class)
 private fun testMulticatch() {
  try {
   throw java.lang.Exception()
  } catch (e: Exception1) {
   for (o in (e as MutableIterable<Number?>?)!!) {}
  } catch (e: Exception2) {
   for (o in (e as MutableIterable<Number?>?)!!) {}
  } catch (e_1: Exception3) {
   for (o_1 in (e_1 as MutableIterable<Any?>?)!!) {}
  } catch (e_1: Exception4) {
   for (o_1 in (e_1 as MutableIterable<Any?>?)!!) {}
  }
  try {
   throw java.lang.Exception()
  } catch (e_2: Exception2) {
   for (o_2 in (e_2 as MutableIterable<Int?>?)!!) {
    val o_3: Long = o_2!!.toInt().toLong()
   }
  } catch (e_2: Exception3) {
   for (o_2 in (e_2 as MutableIterable<Int?>?)!!) {
    val o_3: Long = o_2!!.toInt().toLong()
   }
  }
 }

 private fun <T: MutableIterable<String?>?, U: T, V: MutableIterable<Int?>?> testTypeVariable() {
  val iterable: U? = null
  for (s in iterable!!) {}
  val anotherIterable: IterableReturningTypeVariable<*, *>? = null
  for (s_1 in anotherIterable!!) {
   val s_2: Int = s_1!!.toInt()
  }
  val integerIterable: V? = null
  for (i in integerIterable!!) {
   val i_1: Int = i!!.toInt()
  }
  for (i_2 in integerIterable!!) {
   val i_3: Long = i_2!!.toInt().toLong()
  }
  val charIterable: MutableIterable<Char?>? = null
  for (c in charIterable!!) {
   val c_1: Int = c!!.toChar().code
  }
 }

 private fun testSideEffects() {
  val iterable: MutableIterable<Int?>? = null
  val primitiveArray: IntArray? = null
  for (i in iterable!!) {
   var i_1: Int? = i
   i_1 = 4
  }
  for (i_2 in iterable!!) {
   var i_3: Int = i_2!!.toInt()
   i_3 = i_3 + 4
  }
  for (i_4 in primitiveArray!!) {
   var i_5: Int = i_4
   i_5 = i_5 + 4
  }
  for (i_6 in primitiveArray!!) {
   var i_7: Int = i_6
   i_7 = i_7 + 1
  }
 }

 private fun testOverriddenIterator(i: StringIterable?) {
  for (s in i!!) {}
 }

 open class Exception1 internal constructor(): java.lang.Exception(), MutableIterableJvm<Number?> {
  override fun iterator(): MutableIterator<Number?> {
   return null!!
  }
 }

 open class Exception2 internal constructor(): java.lang.Exception(), MutableIterableJvm<Int?> {
  override fun iterator(): MutableIterator<Int?> {
   return null!!
  }
 }

 open class Exception3 internal constructor(): java.lang.Exception(), MutableIterableJvm<Int> {
  override fun iterator(): MutableIterator<Int> {
   return null!!
  }
 }

 open class Exception4 internal constructor(): java.lang.Exception(), MutableIterableJvm<Any?> {
  override fun iterator(): MutableIterator<Any?> {
   return null!!
  }
 }

 open class IterableReturningTypeVariable<U, T: MutableIterator<Int?>> internal constructor(): MutableIterableJvm<Int?> {
  override fun iterator(): T {
   return null!!
  }
 }

 fun interface StringIterable: MutableIterableJvm<String?> {
  override fun iterator(): StringIterator
 }

 interface StringIterator: JavaIterator<String?>
}
