From 89e3fb7592fef1be082ad5248ce645c61fde67b6 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 5 May 2017 23:16:22 +0300 Subject: [PATCH] Keep JS AST source information after refreshing local names --- .../js/inline/util/rewriters/NameReplacingVisitor.kt | 6 +++--- .../kotlin/js/test/JsLineNumberTestGenerated.java | 6 ++++++ .../testData/lineNumbers/inlineLocalVarsRef.kt | 12 ++++++++++++ .../testData/lineNumbers/inlineReturn.kt | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 js/js.translator/testData/lineNumbers/inlineLocalVarsRef.kt diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/rewriters/NameReplacingVisitor.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/rewriters/NameReplacingVisitor.kt index d867c6625e6..165e1f7dc82 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/rewriters/NameReplacingVisitor.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/rewriters/NameReplacingVisitor.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,14 +22,14 @@ class NameReplacingVisitor(private val replaceMap: Map) : override fun endVisit(x: JsNameRef, ctx: JsContext) { val replacement = replaceMap[x.name] ?: return - ctx.replaceMe(replacement.deepCopy()) + ctx.replaceMe(replacement.deepCopy().source(x.source)) } override fun endVisit(x: JsVars.JsVar, ctx: JsContext) { val replacement = replaceMap[x.name] if (replacement is HasName) { val replacementVar = JsVars.JsVar(replacement.name, x.initExpression) - ctx.replaceMe(replacementVar) + ctx.replaceMe(replacementVar.source(x.source)) } } 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 c137a28c26d..55597bf2328 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 @@ -60,6 +60,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { doTest(fileName); } + @TestMetadata("inlineLocalVarsRef.kt") + public void testInlineLocalVarsRef() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/inlineLocalVarsRef.kt"); + doTest(fileName); + } + @TestMetadata("inlineReturn.kt") public void testInlineReturn() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/inlineReturn.kt"); diff --git a/js/js.translator/testData/lineNumbers/inlineLocalVarsRef.kt b/js/js.translator/testData/lineNumbers/inlineLocalVarsRef.kt new file mode 100644 index 00000000000..bfcb9d37720 --- /dev/null +++ b/js/js.translator/testData/lineNumbers/inlineLocalVarsRef.kt @@ -0,0 +1,12 @@ +inline fun foo(x: Int) { + val y = x > 23 + if (y) { + println("foo") + } +} + +fun bar() { + foo(42) +} + +// LINES: 2 3 4 * 2 9 2 3 4 \ No newline at end of file diff --git a/js/js.translator/testData/lineNumbers/inlineReturn.kt b/js/js.translator/testData/lineNumbers/inlineReturn.kt index 6d5237cd05f..2f7979f87a6 100644 --- a/js/js.translator/testData/lineNumbers/inlineReturn.kt +++ b/js/js.translator/testData/lineNumbers/inlineReturn.kt @@ -21,4 +21,4 @@ fun bar(x: Int) { println("%") } -// LINES: 2 3 4 7 9 10 11 14 16 * 20 * 2 3 3 7 9 10 10 14 16 20 21 \ No newline at end of file +// LINES: 2 3 4 7 9 10 11 14 16 * 20 * 2 3 4 3 7 9 10 11 10 14 16 20 21 \ No newline at end of file