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 61588b1ae7e..c42eff26d15 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 @@ -48,6 +48,18 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { doTest(fileName); } + @TestMetadata("multipleReferences.kt") + public void testMultipleReferences() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/multipleReferences.kt"); + doTest(fileName); + } + + @TestMetadata("optionalArgs.kt") + public void testOptionalArgs() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/optionalArgs.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/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java index 8342a7c21d8..facfebe4923 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 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. @@ -390,7 +390,8 @@ public class TranslationContext { return nameRef; } - return aliasingContext.getAliasForDescriptor(descriptor); + JsExpression alias = aliasingContext.getAliasForDescriptor(descriptor); + return alias != null ? alias.deepCopy() : null; } @NotNull diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/FunctionBodyTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/FunctionBodyTranslator.java index 92da07466bc..db89d45b9ef 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/FunctionBodyTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/FunctionBodyTranslator.java @@ -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. @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.js.translate.general.Translation; import org.jetbrains.kotlin.js.translate.reference.ReferenceTranslator; import org.jetbrains.kotlin.psi.KtDeclarationWithBody; import org.jetbrains.kotlin.psi.KtExpression; +import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt; import org.jetbrains.kotlin.types.KotlinType; import java.util.ArrayList; @@ -86,6 +87,7 @@ public final class FunctionBodyTranslator extends AbstractTranslator { JsStatement assignStatement = assignment(jsNameRef, defaultValue).makeStmt(); JsStatement thenStatement = JsAstUtils.mergeStatementInBlockIfNeeded(assignStatement, defaultArgBlock); JsBinaryOperation checkArgIsUndefined = equality(jsNameRef, Namer.getUndefinedExpression()); + checkArgIsUndefined.source(KotlinSourceElementKt.getPsi(valueParameter.getSource())); JsIf jsIf = JsAstUtils.newJsIf(checkArgIsUndefined, thenStatement); result.add(jsIf); } diff --git a/js/js.translator/testData/lineNumbers/multipleReferences.kt b/js/js.translator/testData/lineNumbers/multipleReferences.kt new file mode 100644 index 00000000000..d4d72176b26 --- /dev/null +++ b/js/js.translator/testData/lineNumbers/multipleReferences.kt @@ -0,0 +1,15 @@ +fun box(x: Int) { + println(x) + println("split") + println(x) + + println(O.y) + println("split") + println(O.y) +} + +object O { + val y = 23 +} + +// LINES: 2 3 4 6 7 8 12 diff --git a/js/js.translator/testData/lineNumbers/optionalArgs.kt b/js/js.translator/testData/lineNumbers/optionalArgs.kt new file mode 100644 index 00000000000..c5e2f72196a --- /dev/null +++ b/js/js.translator/testData/lineNumbers/optionalArgs.kt @@ -0,0 +1,10 @@ +fun box( + x: Int = 23, + y: Int = + 42 +) { + println(x) + println(y) +} + +// LINES: 2 2 3 4 6 7 \ No newline at end of file