// Generated from "inferreturn/InferReturn.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 inferreturn

import javaemul.lang.*
import java.util.ArrayList
import kotlin.Any
import kotlin.Array
import kotlin.String
import kotlin.Suppress
import kotlin.arrayOfNulls
import kotlin.jvm.JvmStatic

open class InferReturn<T> {
 companion object {
  @JvmStatic
  fun <T_1> inferGeneric(foo: T_1): InferReturn<T_1>? {
   return InferReturn<T_1>()
  }

  @JvmStatic
  fun tightenType(foo: InferReturn<String?>?): InferReturn<InferReturn<String?>?>? {
   if (foo != null) {
    return InferReturn.inferGeneric<InferReturn<String?>?>(foo)
   }
   return null
  }

  @JvmStatic
  fun main() {
   val list: ArrayList<Any?>? = InferReturn.newArrayList<Any?>("foo")
   InferReturn.acceptsArrayListOfObject(list)
   val array: Array<Any?>? = InferReturn.newArray<String?>("foo") as Array<Any?>?
   InferReturn.acceptsArrayOfObject(array)
  }

  @JvmStatic
  fun <V> newArrayList(foo: V): ArrayList<V>? {
   return ArrayList<V>()
  }

  @JvmStatic
  fun <V> newArray(foo: V): Array<V>? {
   return arrayOfNulls<Any>(0) as Array<V>
  }

  @JvmStatic
  fun acceptsArrayListOfObject(foo: ArrayList<Any?>?) {}

  @JvmStatic
  fun acceptsArrayOfObject(foo: Array<Any?>?) {}
 }
}
