From 5a4d3c539184bbf055122514012c964edf302d73 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 5 May 2017 22:00:30 +0300 Subject: [PATCH] Generate JS source maps for object instance function --- .../kotlin/js/test/JsLineNumberTestGenerated.java | 6 ++++++ .../kotlin/js/translate/declaration/ClassTranslator.kt | 7 ++++--- .../testData/lineNumbers/multipleReferences.kt | 2 +- .../testData/lineNumbers/objectInstanceFunction.kt | 7 +++++++ .../testData/lineNumbers/syntheticCodeInConstructors.kt | 2 +- .../testData/lineNumbers/syntheticCodeInEnums.kt | 2 +- 6 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 js/js.translator/testData/lineNumbers/objectInstanceFunction.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 bc576584049..4729021d8bd 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 @@ -78,6 +78,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { doTest(fileName); } + @TestMetadata("objectInstanceFunction.kt") + public void testObjectInstanceFunction() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/objectInstanceFunction.kt"); + doTest(fileName); + } + @TestMetadata("optionalArgs.kt") public void testOptionalArgs() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/optionalArgs.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt index 943644723f3..9acc3156106 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt @@ -456,19 +456,20 @@ class ClassTranslator private constructor( instanceFun.name = context().getNameForObjectInstance(descriptor) if (enumInitializerName != null) { - instanceFun.body.statements += JsInvocation(pureFqn(enumInitializerName, null)).makeStmt() + instanceFun.body.statements += JsInvocation(pureFqn(enumInitializerName, null)).source(classDeclaration).makeStmt() } if (descriptor.kind != ClassKind.ENUM_ENTRY) { val instanceCreatedCondition = JsAstUtils.equality(cachedInstanceName.makeRef(), JsNullLiteral()) + .source(classDeclaration) val instanceCreationBlock = JsBlock() val instanceCreatedGuard = JsIf(instanceCreatedCondition, instanceCreationBlock) instanceFun.body.statements += instanceCreatedGuard val objectRef = context().getInnerReference(descriptor) - instanceCreationBlock.statements += JsNew(objectRef).makeStmt() + instanceCreationBlock.statements += JsNew(objectRef).source(classDeclaration).makeStmt() } - instanceFun.body.statements += JsReturn(cachedInstanceName.makeRef()) + instanceFun.body.statements += JsReturn(cachedInstanceName.makeRef().source(classDeclaration)) context().addDeclarationStatement(instanceFun.makeStmt()) } diff --git a/js/js.translator/testData/lineNumbers/multipleReferences.kt b/js/js.translator/testData/lineNumbers/multipleReferences.kt index 10b48803020..9e66b5d53dc 100644 --- a/js/js.translator/testData/lineNumbers/multipleReferences.kt +++ b/js/js.translator/testData/lineNumbers/multipleReferences.kt @@ -12,4 +12,4 @@ object O { val y = 23 } -// LINES: 2 3 4 6 7 8 11 12 +// LINES: 2 3 4 6 7 8 11 12 * 11 11 11 diff --git a/js/js.translator/testData/lineNumbers/objectInstanceFunction.kt b/js/js.translator/testData/lineNumbers/objectInstanceFunction.kt new file mode 100644 index 00000000000..fe7cd02faf1 --- /dev/null +++ b/js/js.translator/testData/lineNumbers/objectInstanceFunction.kt @@ -0,0 +1,7 @@ +object O + +fun foo() { + println("foo") +} + +// LINES: 1 * 1 1 1 4 \ No newline at end of file diff --git a/js/js.translator/testData/lineNumbers/syntheticCodeInConstructors.kt b/js/js.translator/testData/lineNumbers/syntheticCodeInConstructors.kt index 696aba5fb0f..c61b8556ef1 100644 --- a/js/js.translator/testData/lineNumbers/syntheticCodeInConstructors.kt +++ b/js/js.translator/testData/lineNumbers/syntheticCodeInConstructors.kt @@ -25,4 +25,4 @@ class C : A { ) } -// LINES: 1 3 * 10 11 * 15 16 17 14 19 15 22 23 24 22 \ No newline at end of file +// LINES: 1 3 * 1 1 1 * 10 11 * 15 16 17 14 19 15 22 23 24 22 \ No newline at end of file diff --git a/js/js.translator/testData/lineNumbers/syntheticCodeInEnums.kt b/js/js.translator/testData/lineNumbers/syntheticCodeInEnums.kt index 1ae602e011e..3a16652e030 100644 --- a/js/js.translator/testData/lineNumbers/syntheticCodeInEnums.kt +++ b/js/js.translator/testData/lineNumbers/syntheticCodeInEnums.kt @@ -8,4 +8,4 @@ enum class E { } } -// LINES: 1 1 1 1 2 3 4 * 2 2 * 3 3 4 4 6 * 1 * 1 1 1 1 1 1 \ No newline at end of file +// LINES: 1 1 1 1 2 3 4 * 2 2 * 3 3 4 4 6 * 4 4 * 1 * 1 1 1 1 1 1 \ No newline at end of file