// NO_CHECK_LAMBDA_INLINING // FILE: utils.kt fun functionWithLambda(f: (String) -> String): String = f("OK") fun functionWithLambda(f: (StringWrapper) -> StringWrapper): StringWrapper = f(StringWrapper("OK")) fun genericFunctionWithLambda(f: () -> T): T = f() inline fun T.testLet(block: (T) -> R): R = block(this) inline fun T.testApplyToExtensionReceiver(block: T.() -> Unit): T { block() return this } class StringWrapper(val s: String) { inline fun testApplyToDispatchReceiver(block: StringWrapper.() -> Unit): String { block() return s } } inline fun testApplyToArg0(args: T, block: T.() -> Unit): T { args.block() return args } // FILE: testClass.kt class TestClass { val testExtensionReceiver = functionWithLambda { strArg: String -> val anonymousObj = genericFunctionWithLambda { strArg.testLet { object { val strField = it } } } anonymousObj.strField }.testApplyToExtensionReceiver {} val testDispatchReceiver = functionWithLambda { strArg: StringWrapper -> val anonymousObj = genericFunctionWithLambda { strArg.testLet { object { val strField = it } } } anonymousObj.strField }.testApplyToDispatchReceiver {} val testArg0 = testApplyToArg0(functionWithLambda { strArg: String -> val anonymousObj = genericFunctionWithLambda { strArg.testLet { object { val strField = it } } } anonymousObj.strField }) {} val testChain = functionWithLambda { strArg: String -> val anonymousObj = genericFunctionWithLambda { strArg.testLet { object { val strField1 = it } }.testLet { object { val strField2 = it.strField1 } } } anonymousObj.strField2 }.testApplyToExtensionReceiver {} } // FILE: main.kt fun box(): String { val testObject = TestClass() when { testObject.testExtensionReceiver != "OK" -> return "testExtensionReceiver failed" testObject.testDispatchReceiver != "OK" -> return "testDispatchReceiver failed" testObject.testArg0 != "OK" -> return "testArg0 failed" testObject.testChain != "OK" -> return "testChain failed" else -> return "OK" } }