Generate JS source maps for object instance function

This commit is contained in:
Alexey Andreev
2017-05-05 22:00:30 +03:00
parent 77df0f28bf
commit 5a4d3c5391
6 changed files with 20 additions and 6 deletions
@@ -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");
@@ -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())
}
@@ -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
@@ -0,0 +1,7 @@
object O
fun foo() {
println("foo")
}
// LINES: 1 * 1 1 1 4
@@ -25,4 +25,4 @@ class C : A {
)
}
// LINES: 1 3 * 10 11 * 15 16 17 14 19 15 22 23 24 22
// LINES: 1 3 * 1 1 1 * 10 11 * 15 16 17 14 19 15 22 23 24 22
@@ -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
// LINES: 1 1 1 1 2 3 4 * 2 2 * 3 3 4 4 6 * 4 4 * 1 * 1 1 1 1 1 1