From 7335f2394bd590252f6e9c04f8a947184bfb2d93 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Thu, 21 Apr 2016 14:44:37 +0300 Subject: [PATCH] Sort result ranges in SMAP class --- .../org/jetbrains/kotlin/codegen/inline/InlineCodegen.java | 2 +- .../src/org/jetbrains/kotlin/codegen/inline/SMAP.kt | 7 ++++--- .../jetbrains/kotlin/codegen/inline/SMAPAndMethodNode.kt | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) 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 f65b8e5a4ff..215737c6a8d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java @@ -901,7 +901,7 @@ public class InlineCodegen extends CallGenerator { } public static SourceMapper createNestedSourceMapper(@NotNull SMAPAndMethodNode nodeAndSmap, @NotNull SourceMapper parent) { - return new NestedSourceMapper(parent, nodeAndSmap.getRanges(), nodeAndSmap.getClassSMAP().getSourceInfo()); + return new NestedSourceMapper(parent, nodeAndSmap.getSortedRanges(), nodeAndSmap.getClassSMAP().getSourceInfo()); } static void reportIncrementalInfo( diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt index 7bb0c3f4ec6..d333635f240 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt @@ -96,7 +96,8 @@ open class NestedSourceMapper( if (mappedLineNumber > 0) { return mappedLineNumber } else { - val rangeForMapping = if (lastVisitedRange?.contains(lineNumber) ?: false) lastVisitedRange!! else findMappingIfExists(lineNumber)!! + val rangeForMapping = (if (lastVisitedRange?.contains(lineNumber) ?: false) lastVisitedRange!! else findMappingIfExists(lineNumber)) + ?: error("Can't find range to map line $lineNumber in ${sourceInfo.source}:${sourceInfo.pathOrCleanFQN}") val sourceLineNumber = rangeForMapping.mapDestToSource(lineNumber) val newLineNumber = parent.mapLineNumber(sourceLineNumber, rangeForMapping.parent!!.name, rangeForMapping.parent!!.path) if (newLineNumber > 0) { @@ -118,10 +119,10 @@ open class NestedSourceMapper( open class InlineLambdaSourceMapper( parent: SourceMapper, smap: SMAPAndMethodNode -) : NestedSourceMapper(parent, smap.ranges, smap.classSMAP.sourceInfo) { +) : NestedSourceMapper(parent, smap.sortedRanges, smap.classSMAP.sourceInfo) { init { - assert(smap.ranges.isNotEmpty()) { + assert(ranges.isNotEmpty()) { "Mapping ranges should be presented in inline lambda: ${smap.node}" } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPAndMethodNode.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPAndMethodNode.kt index 5778255c0f1..d09a0d38945 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPAndMethodNode.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAPAndMethodNode.kt @@ -23,7 +23,7 @@ import java.util.* //TODO comment class SMAPAndMethodNode(val node: MethodNode, val classSMAP: SMAP) { - val ranges = createLineNumberSequence(node, classSMAP).map { it.mapper }.distinct().toList() + val sortedRanges = createLineNumberSequence(node, classSMAP).map { it.mapper }.distinct().toList().sortedWith(RangeMapping.Comparator) fun copyWithNewNode(newMethodNode: MethodNode) = SMAPAndMethodNode(newMethodNode, classSMAP) }