import `java::java`java.*
import java.`java::java.util`util.*

fun foo(~a~a : `kotlin::Array`Array<`kotlin::Int`Int>) : `java::java.util.ArrayList`ArrayList {
  `a`a.`kotlin::Array.get(Int)`get(1)
  `a`a.`kotlin::Array.set(Int, Int)`set(1, 1)
}

fun foo(o : `java::java.lang.Object`Object, l : `java::java`java.`java::java.util`util.`java::java.util.ArrayList`ArrayList) : `java::java.util.ArrayList`ArrayList {}

~A~class A~A()~()  {
  fun f(a : `java::java`java.`java::java.util`util.`java::java.util.ArrayList`ArrayList) {}
  fun f(a : `java::java.util.ArrayList`ArrayList) {}

}

class B : `java::java.lang.Object`Object {

  fun f(a : `java::java`java.`java::java.util`util.`java::java.util.ArrayList`ArrayList) {}
  fun f(a : `java::java.util.ArrayList`ArrayList) {}


  ~foo~fun foo(abc : `A`A) : `A`A {
    `java::java`java.`java::java.lang`lang.`java::java.lang.System`System.`java::java.lang.System.out`out.`java::java.io.PrintStream.print(Int)`print(1)
    `java::java`java.`java::java.util`util.`java::java.util.Collections`Collections.`java::java.util.Collections.emptyList()`emptyList()
    `java::java`java.`!`Foo
    `java::java.util.Collections`Collections.`java::java.util.Collections.emptyList()`emptyList()
  }

  fun barrr() : `kotlin::Int`Int {
    `foo`foo(`A()`A())
  }
}

