Fix generation of JS source maps for class properties

This commit is contained in:
Alexey Andreev
2017-05-05 21:46:59 +03:00
parent 6f8ccfb80d
commit 77df0f28bf
6 changed files with 48 additions and 6 deletions
@@ -48,6 +48,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest {
doTest(fileName);
}
@TestMetadata("delegateMemberVal.kt")
public void testDelegateMemberVal() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/delegateMemberVal.kt");
doTest(fileName);
}
@TestMetadata("inlining.kt")
public void testInlining() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/inlining.kt");
@@ -95,4 +101,10 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/syntheticCodeInEnums.kt");
doTest(fileName);
}
@TestMetadata("valParameter.kt")
public void testValParameter() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/valParameter.kt");
doTest(fileName);
}
}
@@ -380,7 +380,8 @@ class ClassTranslator private constructor(
function.parameters.add(i, JsParameter(name))
if (fieldName != null && constructor == primaryConstructor) {
additionalStatements += JsAstUtils.defineSimpleProperty(fieldName.ident, name.makeRef())
val source = (capturedVar as? DeclarationDescriptorWithSource)?.source
additionalStatements += JsAstUtils.defineSimpleProperty(fieldName.ident, name.makeRef(), source)
}
}
@@ -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.
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor;
import org.jetbrains.kotlin.js.translate.context.Namer;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt;
import static org.jetbrains.kotlin.js.translate.utils.TranslationUtils.assignmentToBackingField;
@@ -37,7 +38,9 @@ public final class InitializerUtils {
@NotNull PropertyDescriptor descriptor,
@NotNull JsExpression value
) {
return assignmentToBackingField(context, descriptor, value).makeStmt();
JsExpression assignment = assignmentToBackingField(context, descriptor, value);
assignment.setSource(KotlinSourceElementKt.getPsi(descriptor.getSource()));
return assignment.makeStmt();
}
@Nullable
@@ -46,6 +49,6 @@ public final class InitializerUtils {
@NotNull JsExpression value
) {
String name = descriptor.getName().asString();
return JsAstUtils.defineSimpleProperty(Namer.getDelegateName(name), value);
return JsAstUtils.defineSimpleProperty(Namer.getDelegateName(name), value, descriptor.getSource());
}
}
@@ -20,10 +20,12 @@ import com.intellij.util.SmartList;
import kotlin.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.SourceElement;
import org.jetbrains.kotlin.js.backend.ast.*;
import org.jetbrains.kotlin.js.backend.ast.metadata.MetadataProperties;
import org.jetbrains.kotlin.js.backend.ast.metadata.SideEffectKind;
import org.jetbrains.kotlin.js.translate.context.Namer;
import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt;
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import org.jetbrains.kotlin.util.OperatorNameConventions;
@@ -466,8 +468,12 @@ public final class JsAstUtils {
}
@NotNull
public static JsStatement defineSimpleProperty(@NotNull String name, @NotNull JsExpression value) {
return assignment(new JsNameRef(name, new JsThisRef()), value).makeStmt();
public static JsStatement defineSimpleProperty(@NotNull String name, @NotNull JsExpression value, @Nullable SourceElement source) {
JsExpression assignment = assignment(new JsNameRef(name, new JsThisRef()), value);
if (source != null) {
assignment.setSource(KotlinSourceElementKt.getPsi(source));
}
return assignment.makeStmt();
}
@NotNull
@@ -0,0 +1,10 @@
class A {
val z by
lazy { 23 }
}
fun foo() {
println(A().z)
}
// LINES: 2 3 * 3 * 7
+10
View File
@@ -0,0 +1,10 @@
class A(
val x: Int,
val y: String
)
fun foo() {
A(23, "foo")
}
// LINES: 2 3 * 7