diff --git a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/AbstractNode.java b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/AbstractNode.java index fe08e840677..d0c2aa0ee82 100644 --- a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/AbstractNode.java +++ b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/AbstractNode.java @@ -28,8 +28,12 @@ abstract class AbstractNode extends HasMetadata implements JsNode { return out.toString(); } - protected T withMetadataFrom(T other) { + protected T withMetadataFrom(T other) { this.copyMetadataFrom(other); + Object otherSource = other.getSource(); + if (otherSource != null) { + source(otherSource); + } //noinspection unchecked return (T) this; } 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 1edb4afa486..61588b1ae7e 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,18 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/lineNumbers"), Pattern.compile("^([^_](.+))\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("inlining.kt") + public void testInlining() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/inlining.kt"); + doTest(fileName); + } + + @TestMetadata("inliningWithLambda.kt") + public void testInliningWithLambda() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/inliningWithLambda.kt"); + doTest(fileName); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/simple.kt"); diff --git a/js/js.translator/testData/lineNumbers/inlining.kt b/js/js.translator/testData/lineNumbers/inlining.kt new file mode 100644 index 00000000000..897026381dd --- /dev/null +++ b/js/js.translator/testData/lineNumbers/inlining.kt @@ -0,0 +1,14 @@ +fun box() { + println("1") + bar() + println("2") + bar() + println("3") +} + +inline fun bar() { + println("bar1") + println("bar2") +} + +// LINES: 2 10 11 4 10 11 6 10 11 diff --git a/js/js.translator/testData/lineNumbers/inliningWithLambda.kt b/js/js.translator/testData/lineNumbers/inliningWithLambda.kt new file mode 100644 index 00000000000..de0e0b8f3fd --- /dev/null +++ b/js/js.translator/testData/lineNumbers/inliningWithLambda.kt @@ -0,0 +1,19 @@ +fun box() { + println("1") + foo { + println("x") + } + println("2") + foo { + println("y") + } + println("3") +} + +inline fun foo(f: () -> Unit) { + println("before") + f() + println("after") +} + +// LINES: 2 14 4 16 6 14 8 16 10 14 15 16 \ No newline at end of file