From df3f163ee27afd2aca312f233b272803a128ef43 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Sun, 6 Mar 2016 18:58:15 +0300 Subject: [PATCH] JS: inline safe calls #KT-6912 fixed --- Changelog.md | 9 ++++++--- .../js/test/semantics/InlineJsTestGenerated.java | 6 ++++++ .../reference/CallExpressionTranslator.java | 2 +- .../testData/inline/cases/safeCall.kt | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 js/js.translator/testData/inline/cases/safeCall.kt diff --git a/Changelog.md b/Changelog.md index 2cd5b766f51..c318edf1a49 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,8 @@ -= CHANGELOG = +# CHANGELOG -== 1.1 == +## 1.1 -== 1.0.2 == +## 1.0.2 + +### JS +- Safe calls (`x?.let { it }`) are now inlined 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 d4da5fed01d..a008bdd75bc 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 @@ -299,6 +299,12 @@ public class InlineJsTestGenerated extends AbstractInlineJsTest { doTest(fileName); } + @TestMetadata("safeCall.kt") + public void testSafeCall() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inline/cases/safeCall.kt"); + doTest(fileName); + } + @TestMetadata("severalClosures.kt") public void testSeveralClosures() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inline/cases/severalClosures.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java index edf05eff073..dca7b3606c0 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java @@ -55,7 +55,7 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl JsExpression callExpression = (new CallExpressionTranslator(expression, receiver, context)).translate(); - if (!resolvedCall.isSafeCall() && shouldBeInlined(expression, context)) { + if (shouldBeInlined(expression, context)) { setInlineCallMetadata(callExpression, expression, resolvedCall, context); } diff --git a/js/js.translator/testData/inline/cases/safeCall.kt b/js/js.translator/testData/inline/cases/safeCall.kt new file mode 100644 index 00000000000..f19c95eb929 --- /dev/null +++ b/js/js.translator/testData/inline/cases/safeCall.kt @@ -0,0 +1,15 @@ +package foo + +// CHECK_CONTAINS_NO_CALLS: sum + +inline fun T.doLet(f: (T) -> R): R = f(this) + +private fun sum(x: Int?, y: Int): Int = + x?.doLet { it + y } ?: 0 + +fun box(): String { + assertEquals(5, sum(2, 3)) + assertEquals(0, sum(null, 3)) + + return "OK" +} \ No newline at end of file