From e1009622af4091ecb5e0690183f4c23207bee8e8 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Wed, 10 May 2017 18:26:09 +0300 Subject: [PATCH] Fix generation of JS source maps for call expressions --- .../js/test/JsLineNumberTestGenerated.java | 6 ++++++ .../translate/callTranslator/CallTranslator.kt | 6 +++--- .../testData/lineNumbers/chainedCall.kt | 17 +++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 js/js.translator/testData/lineNumbers/chainedCall.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java index f1cddae685f..911583098a0 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java @@ -36,6 +36,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/lineNumbers"), Pattern.compile("^([^_](.+))\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("chainedCall.kt") + public void testChainedCall() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/chainedCall.kt"); + doTest(fileName); + } + @TestMetadata("closure.kt") public void testClosure() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/closure.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt index f44d61052d1..ed5defd6724 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt @@ -44,7 +44,7 @@ object CallTranslator { resolvedCall: ResolvedCall, extensionOrDispatchReceiver: JsExpression? = null ): JsExpression { - return translateCall(context, resolvedCall, ExplicitReceivers(extensionOrDispatchReceiver)) + return translateCall(context, resolvedCall, ExplicitReceivers(extensionOrDispatchReceiver)).source(resolvedCall.call.callElement) } fun translateGet(context: TranslationContext, @@ -52,7 +52,7 @@ object CallTranslator { extensionOrDispatchReceiver: JsExpression? = null ): JsExpression { val variableAccessInfo = VariableAccessInfo(context.getCallInfo(resolvedCall, extensionOrDispatchReceiver), null) - return variableAccessInfo.translateVariableAccess() + return variableAccessInfo.translateVariableAccess().source(resolvedCall.call.callElement) } fun translateSet(context: TranslationContext, @@ -61,7 +61,7 @@ object CallTranslator { extensionOrDispatchReceiver: JsExpression? = null ): JsExpression { val variableAccessInfo = VariableAccessInfo(context.getCallInfo(resolvedCall, extensionOrDispatchReceiver), value) - return variableAccessInfo.translateVariableAccess() + return variableAccessInfo.translateVariableAccess().source(resolvedCall.call.callElement) } fun buildCall(context: TranslationContext, diff --git a/js/js.translator/testData/lineNumbers/chainedCall.kt b/js/js.translator/testData/lineNumbers/chainedCall.kt new file mode 100644 index 00000000000..4ecb49f01e9 --- /dev/null +++ b/js/js.translator/testData/lineNumbers/chainedCall.kt @@ -0,0 +1,17 @@ +fun box(a: C, x: dynamic) { + println(a + .foo() + .bar()) + + println(a + .baz + .boo) +} + +class C { + fun foo(): dynamic = null + + val baz: dynamic get() = null +} + +// LINES: 2 4 3 2 6 8 7 6 12 * 14 \ No newline at end of file