diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/context/FunctionContext.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/context/FunctionContext.kt index 9b4e4a772b4..bd29af35519 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/context/FunctionContext.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/context/FunctionContext.kt @@ -19,9 +19,7 @@ package org.jetbrains.kotlin.js.inline.context import com.google.dart.compiler.backend.js.ast.* import com.google.dart.compiler.backend.js.ast.metadata.descriptor import org.jetbrains.kotlin.js.inline.FunctionReader -import org.jetbrains.kotlin.js.inline.util.getSimpleName -import org.jetbrains.kotlin.js.inline.util.isCallInvocation -import org.jetbrains.kotlin.js.inline.util.transitiveStaticRef +import org.jetbrains.kotlin.js.inline.util.* abstract class FunctionContext( private val function: JsFunction, @@ -86,7 +84,7 @@ abstract class FunctionContext( /** process cases 2, 3 */ val qualifier = callQualifier.transitiveStaticRef return when (qualifier) { - is JsInvocation -> lookUpStaticFunction(getSimpleName(qualifier)!!) + is JsInvocation -> lookUpStaticFunction(getSimpleName(qualifier)!!)?.let { if (isFunctionCreator(it)) it else null } is JsNameRef -> lookUpStaticFunction(qualifier.name) is JsFunction -> qualifier else -> null diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineJsTestGenerated.java index 256b8c5171c..fa0ded4e1df 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineJsTestGenerated.java @@ -89,6 +89,12 @@ public class InlineJsTestGenerated extends AbstractInlineJsTest { doTest(fileName); } + @TestMetadata("dontInlineFunctionCall.kt") + public void testDontInlineFunctionCall() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inline/cases/dontInlineFunctionCall.kt"); + doTest(fileName); + } + @TestMetadata("expressionBodyWithLambdaCall.kt") public void testExpressionBodyWithLambdaCall() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inline/cases/expressionBodyWithLambdaCall.kt"); diff --git a/js/js.translator/testData/inline/cases/dontInlineFunctionCall.kt b/js/js.translator/testData/inline/cases/dontInlineFunctionCall.kt new file mode 100644 index 00000000000..8892569b41d --- /dev/null +++ b/js/js.translator/testData/inline/cases/dontInlineFunctionCall.kt @@ -0,0 +1,10 @@ +package foo + +inline fun block(p: () -> Int) = p() + +fun createFunction(x: Int): () -> Int = { x } + +fun box(): String { + assertEquals(23, block(createFunction(23))) + return "OK" +} \ No newline at end of file