// MODULE: lib // FILE: A.kt // VERSION: 1 class X { fun foo(s: String): String = "initial overload $s" fun bar(s: String?): String = "initial nullable overload $s" fun qux(s: Any): String = "initial any overload $s" } fun foo(s: String): String = "initial overload $s" fun bar(s: String?): String = "initial nullable overload $s" fun qux(s: Any): String = "initial any overload $s" // FILE: B.kt // VERSION: 2 class X { fun foo(): String = "no arg overload" fun foo(s: String): String = "initial overload $s" fun foo(s: String?): String = "nullable overload $s" fun foo(s: String, p: String): String = "more args overload $s" fun bar(s: String?): String = "initial overload $s" fun bar(s: String): String = "non-nullable overload $s" fun qux(s: Any): String = "initial any overload $s" fun qux(s: String): String = "initial narrower overload $s" } fun foo(): String = "no arg overload" fun foo(s: String): String = "initial overload $s" fun foo(s: String?): String = "nullable overload $s" fun foo(s: String, p: String): String = "more args overload $s" fun bar(s: String?): String = "initial overload $s" fun bar(s: String): String = "non-nullable overload $s" fun qux(s: Any): String = "initial any overload $s" fun qux(s: String): String = "initial narrower overload $s" // MODULE: mainLib(lib) // FILE: mainLib.kt val x = X() fun lib(): String = when { x.foo("first") != "initial overload first" -> "fail 1" x.bar("second") != "initial overload second" -> "fail 2" x.qux("third") != "initial any overload third" -> "fail 3" foo("first") != "initial overload first" -> "fail 4" bar("second") != "initial overload second" -> "fail 5" qux("third") != "initial any overload third" -> "fail 6" else -> "OK" } // MODULE: main(mainLib) // FILE: main.kt fun box(): String = lib()