// KJS_WITH_FULL_RUNTIME class L class A { fun foo(a: L) = "Int" fun foo(a: L) = "String" fun L.bar() = "Int2" fun L.bar() = "String2" } fun foo(a: L) = "Int" fun foo(a: L) = "String" private class TestClass { private val data = mutableListOf>() fun withData(data: List>) = apply { this.data.addAll(data) } fun withData(row: List) = apply { data.add(row) } fun getCols(): Int { return data.firstOrNull()?.size ?: return 0 } } object B { fun baz(vararg v: B) = "[A]" fun baz(vararg v: String) = "[S]" fun baz(v: Array) = "Array" } class C { fun bac(c: T): String { return "T4" } fun bac(c: Int): String { return "Int5" } fun bac(c: List): String { return "ListT4" } fun bac(c: List): String { return "ListInt4" } fun bac(c: List<*>): String { return "ListStar4" } } fun box(): String { if (A().foo(L()) != "Int") return "fail1" A().apply { if (L().bar() != "Int2") return "fail2" } if (foo(L()) != "Int") return "fail3" val b = TestClass() val data = mutableListOf>() data.add(listOf("a", "b", "c")) data.add(listOf("d", "e", "f")) b.withData(data) if (b.getCols() != 3) return "fail4" if (B.baz(B) != "[A]") return "fail5" if (B.baz("a") != "[S]") return "fail6" if (B.baz(arrayOf("b")) != "Array") return "fail7" if(C().bac("a") != "T4") return "fail8" if(C().bac(5) != "Int5") return "fail9" if(C().bac(listOf("a", "b")) != "ListT4") return "fail10" if(C().bac(listOf(5, 6)) != "ListInt4") return "fail11" if(C().bac(listOf(Any(), Any())) != "ListStar4") return "fail12" return "OK" }