From 90651e4b286c3c26d0fa99e3f317c580c8b297a0 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Mon, 16 Mar 2015 17:39:44 +0300 Subject: [PATCH] Do nothing if there is no smap data on anonymous object transfromation during fun inline --- .../inline/AnonymousObjectTransformer.java | 12 +++++++----- .../kotlin/codegen/inline/InlineCodegen.java | 1 + .../kotlin/codegen/inline/InlineCodegenUtil.java | 2 +- .../jetbrains/kotlin/codegen/inline/SMAPParser.kt | 15 +++++++++++---- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java index 1644e8a58fa..f33ca0b75a8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java @@ -48,8 +48,6 @@ public class AnonymousObjectTransformer { private String debugInfo; - private SMAP smap; - private SourceMapper sourceMapper; private final InliningContext inliningContext; @@ -162,9 +160,13 @@ public class AnonymousObjectTransformer { }, ClassReader.SKIP_FRAMES); if (!inliningContext.isInliningLambda) { - assert debugInfo != null && !debugInfo.isEmpty() : "Debug info is null for " + oldObjectType; - smap = new SMAPParser(debugInfo, sourceInfo, "notused", 1, 2).parse(); - sourceMapper = SourceMapper.Default.createFromSmap(smap); + if (debugInfo != null && !debugInfo.isEmpty()) { + sourceMapper = SourceMapper.OBJECT$.createFromSmap(SMAPParser.parse(debugInfo)); + } + else { + //seems we can't do any clever mapping cause we don't know any about original class name + sourceMapper = IdenticalSourceMapper.INSTANCE$; + } } else { classBuilder.visitSource(sourceInfo, debugInfo); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java index 47a711ce4f8..4fa32dad2ce 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java @@ -382,6 +382,7 @@ public class InlineCodegen extends CallGenerator { @NotNull @Override + //TODO: obtain name from context public String getClassName() { return className; } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java index 2b5256fa10b..4f627d046de 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java @@ -126,7 +126,7 @@ public class InlineCodegenUtil { } }, ClassReader.SKIP_FRAMES); - SMAP smap = new SMAPParser(debugInfo[1], debugInfo[0], classId.toString(), lines[0], lines[1]).parse(); + SMAP smap = SMAPParser.parseOrCreateDefault(debugInfo[1], debugInfo[0], classId.toString(), lines[0], lines[1]); return new SMAPAndMethodNode(node[0], smap); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPParser.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPParser.kt index ed3fd54b423..4ef1ac619ee 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPParser.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPParser.kt @@ -16,11 +16,12 @@ package org.jetbrains.kotlin.codegen.inline -class SMAPParser(val mappingInfo: String?, val source: String, val path: String, val methodStartLine: Int, val methodEndLine: Int) { +import kotlin.platform.platformStatic - val fileMappings = linkedMapOf() +object SMAPParser { - fun parse() : SMAP { + [platformStatic] + public fun parseOrCreateDefault(mappingInfo: String?, source: String, path: String, methodStartLine: Int, methodEndLine: Int): SMAP { if (mappingInfo == null || mappingInfo.isEmpty()) { val fm = FileMapping(source, path) if (methodStartLine <= methodEndLine) { @@ -29,6 +30,12 @@ class SMAPParser(val mappingInfo: String?, val source: String, val path: String, } return SMAP(listOf(fm)) } + return parse(mappingInfo) + } + + [platformStatic] + public fun parse(mappingInfo: String): SMAP { + val fileMappings = linkedMapOf() val fileSectionStart = mappingInfo.indexOf(SMAP.FILE_SECTION) + SMAP.FILE_SECTION.length() val lineSectionAnchor = mappingInfo.indexOf(SMAP.LINE_SECTION) @@ -54,7 +61,7 @@ class SMAPParser(val mappingInfo: String?, val source: String, val path: String, /*only simple mapping now*/ val targetSplit = lineMapping.indexOf(':') val originalPart = lineMapping.substring(0, targetSplit) - var rangeSeparator = originalPart.indexOf(',').let { if (it < 0) targetSplit else it} + var rangeSeparator = originalPart.indexOf(',').let { if (it < 0) targetSplit else it } val fileSeparator = lineMapping.indexOf('#') val originalIndex = Integer.valueOf(originalPart.substring(0, fileSeparator))