Sort result ranges in SMAP class

This commit is contained in:
Michael Bogdanov
2016-04-21 14:44:37 +03:00
parent d945c47b63
commit 7335f2394b
3 changed files with 6 additions and 5 deletions
@@ -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(
@@ -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}"
}
}
@@ -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)
}