// Generated from "jsmethod/JsMethodExample.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 jsmethod

import javaemul.lang.*
import java.util.ArrayList
import jsinterop.annotations.JsMethod
import jsinterop.annotations.JsType
import kotlin.String
import kotlin.Suppress
import kotlin.jvm.JvmStatic

open class JsMethodExample {
 @JsMethod
 external open fun <T: ArrayList<String?>?> testMethod(): T

 abstract class Base<T> internal constructor() {
  @JsMethod(name = "m")
  internal open fun m_pp_jsmethod(t: T) {}
 }

 fun interface I {
  @JsMethod(name = "mString")
  fun m(s: String?)
 }

 open class Sub internal constructor(): Base<String?>(), I {
  override fun m(s: String?) {}

  internal override fun m_pp_jsmethod(arg0: String?) {
   this.m(arg0)
  }
 }

 @JsType
 open class SubJsType internal constructor(): Base<String?>() {
  public open fun m(s: String?) {}

  override fun m_pp_jsmethod(arg0: String?) {
   this.m(arg0)
  }

  companion object {
   @JvmStatic
   internal fun n_pp_jsmethod() {}
  }
 }

 @JsType
 open class SubGenericsJsType<T> internal constructor(): Base<T>() {
  public open fun m(s: T) {}

  override fun m_pp_jsmethod(arg0: T) {
   this.m(arg0)
  }
 }

 @JsType
 open class SubJsTypeWithRenamedJsMethod internal constructor(): Base<String?>() {
  @JsMethod(name = "renamedM")
  public open fun m(s: String?) {}

  override fun m_pp_jsmethod(arg0: String?) {
   this.m(arg0)
  }
 }

 interface InterfaceWithMethod {
  fun m()

  fun n()
 }

 fun interface InterfaceExposingJsMethods: InterfaceWithMethod {
  @JsMethod
  override fun m() {}

  @JsMethod
  override fun n()
 }

 open class SuperClassWithFinalMethod internal constructor() {
  fun n() {}
 }

 open class ExposesOverrideableJsMethod internal constructor(): SuperClassWithFinalMethod(), InterfaceExposingJsMethods
}
