| // WITH_STDLIB | |
| // IGNORE_HEADER_MODE: JVM | |
| // Reason: KT-82404 | |
| // MODULE: lib | |
| // FILE: lib.kt | |
| // KT-40216 | |
| inline fun <T> T.also(f: (T) -> Unit): T { | |
| f(this) | |
| return this | |
| } | |
| object FieldTest { | |
| var result = "" | |
| private val test = object { | |
| fun bar() = object { | |
| fun qux() = object { | |
| fun biq() = object { | |
| fun caz() = object { | |
| }.also { result += "d" } | |
| }.also { result += "c" } | |
| }.also { result += "b" } | |
| }.also { result += "a" } | |
| }.also { result += "!" } | |
| private val ttt = test.bar() | |
| private val qqq = ttt.qux() | |
| val bbb = qqq.biq().also { it.caz() } | |
| } | |
| object FunTest { | |
| var result = "" | |
| private fun bar() = object { | |
| fun qux() = object { | |
| fun biq() = object { | |
| fun caz() = object { | |
| }.also { result += "w" } | |
| }.also { result += "x" } | |
| }.also { result += "y" } | |
| }.also { result += "z" } | |
| private fun ttt() = bar() | |
| private fun qqq() = ttt().qux() | |
| fun bbb() = qqq().biq().also { it.caz() } | |
| } | |
| object DelegateTest { | |
| var result = "" | |
| val f by lazy { | |
| object { }.also { result += "OK" } | |
| } | |
| fun bbb() = f | |
| } | |
| // MODULE: lib2(lib) | |
| // FILE: lib2.kt | |
| fun test1(): String { | |
| return FieldTest.result | |
| } | |
| fun test2(): String { | |
| FunTest.bbb() | |
| return FunTest.result | |
| } | |
| fun test3(): String { | |
| DelegateTest.bbb() | |
| return DelegateTest.result | |
| } | |
| // MODULE: main(lib2) | |
| // FILE: main.kt | |
| fun box(): String { | |
| if (test1() != "!abcd") return "FAIL 1: ${test1()}" | |
| if (test2() != "zyxw") return "FAIL 2: ${test2()}" | |
| return test3() | |
| } |