From c9545f291a1f759ac056abab33be84396993dd02 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Mon, 15 May 2017 16:01:08 +0300 Subject: [PATCH] Fix JS source maps for properties without initializer --- .../kotlin/js/test/JsLineNumberTestGenerated.java | 6 ++++++ .../js/translate/initializer/InitializerVisitor.java | 4 ++-- .../lineNumbers/propertyWithoutInitializer.kt | 12 ++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 js/js.translator/testData/lineNumbers/propertyWithoutInitializer.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 eb9818e48f2..8d7544510a7 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 @@ -192,6 +192,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { doTest(fileName); } + @TestMetadata("propertyWithoutInitializer.kt") + public void testPropertyWithoutInitializer() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/propertyWithoutInitializer.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/initializer/InitializerVisitor.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java index f04b48d8a62..aa6eaccc8b8 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java @@ -60,12 +60,12 @@ public final class InitializerVisitor extends TranslatorVisitor { else if (Boolean.TRUE.equals(context.bindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) { JsNameRef backingFieldReference = TranslationUtils.backingFieldReference(context, descriptor); JsExpression defaultValue = generateDefaultValue(descriptor, backingFieldReference); - statement = TranslationUtils.assignmentToBackingField(context, descriptor, defaultValue).makeStmt(); + statement = TranslationUtils.assignmentToBackingField(context, descriptor, defaultValue).source(property).makeStmt(); } else if (JsDescriptorUtils.isSimpleFinalProperty(descriptor)) { JsNameRef propRef = new JsNameRef(context.getNameForDescriptor(descriptor), new JsThisRef()); JsExpression defaultValue = generateDefaultValue(descriptor, propRef); - statement = JsAstUtils.assignment(propRef, defaultValue).makeStmt(); + statement = JsAstUtils.assignment(propRef, defaultValue).source(property).makeStmt(); } if (statement != null && !JsAstUtils.isEmptyStatement(statement)) { diff --git a/js/js.translator/testData/lineNumbers/propertyWithoutInitializer.kt b/js/js.translator/testData/lineNumbers/propertyWithoutInitializer.kt new file mode 100644 index 00000000000..0c6b69f7165 --- /dev/null +++ b/js/js.translator/testData/lineNumbers/propertyWithoutInitializer.kt @@ -0,0 +1,12 @@ +open class A { + val x: Int + + open val y: Int + + init { + x = 23 + y = 42 + } +} + +// LINES: 2 4 7 8 4 \ No newline at end of file