// Generated from "multipleabstractparents/MultipleAbstractParents.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 multipleabstractparents

import javaemul.lang.*
import kotlin.Array
import kotlin.String
import kotlin.Suppress
import kotlin.assert
import kotlin.jvm.JvmStatic

open class MultipleAbstractParents {
 companion object {
  @JvmStatic
  fun main(vararg args: String?) {
   val args_1: Array<String?>? = args as Array<String?>?
   assert(ArrayList<String?>().getFoo(null)!!.equals("AbstractCollection"))
   assert(StringList().getFoo(null)!!.equals("AbstractCollection"))
   assert((StringList() as IStringList).getFoo(null)!!.equals("AbstractCollection"))
  }
 }

 fun interface List<T> {
  fun getFoo(t: T): String?
 }

 fun interface Collection<T> {
  fun getFoo(t: T): String?
 }

 abstract class AbstractListCollection<T>: List<T>, Collection<T>

 abstract class AbstractCollection<T> {
  open fun getFoo(t: T): String? {
   return "AbstractCollection"
  }
 }

 abstract class AbstractList<T>: AbstractCollection<T>(), List<T>

 abstract class AbstractList2<T>: List<T>

 open class ArrayList<T>: AbstractList<T>()

 fun interface IStringList: List<String?> {
  override fun getFoo(string: String?): String?
 }

 abstract class AbstractStringList: AbstractList<String?>(), IStringList

 abstract class AbstractStringList2: AbstractList2<String?>(), IStringList

 open class SubAbstractStringList2: AbstractStringList2() {
  override fun getFoo(t: String?): String? {
   return null
  }
 }

 abstract class AbstractStringList3: AbstractList2<String?>()

 open class StringList: AbstractStringList()

 open class StringListChild: StringList()
}
