Revert "Change the kotlin debug parser to use segment trees for results"
This reverts commit 6c15ec9c085131d7a75d638fe679f98feddb4923.
Reason for revert: Ruining the bots
Change-Id: Ie302dc9f2296269d8d9ebe437564127707e84ce5
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParser.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParser.java
index 8c6c2b8..a0d4df2 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParser.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParser.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.kotlin;
import com.android.tools.r8.naming.Range;
-import com.android.tools.r8.utils.SegmentTree;
import com.android.tools.r8.utils.ThrowingConsumer;
import java.io.BufferedReader;
import java.io.Closeable;
@@ -212,10 +211,9 @@
private static void addDebugEntryToBuilder(String debugEntry, ResultBuilder builder)
throws KotlinSourceDebugExtensionParserException {
- // <from>#<file>,<size>:<debug-line-position>
+ // <from>#<file>,<to>:<debug-line-position>
// or
// <from>#<file>:<debug-line-position>
- // All positions should define intervals for mappings.
try {
int targetSplit = debugEntry.indexOf(':');
int target = Integer.parseInt(debugEntry.substring(targetSplit + 1));
@@ -225,7 +223,7 @@
// The range may have a different end than start.
String fileAndEndRange = original.substring(fileIndexSplit + 1);
int endRangeCharPosition = fileAndEndRange.indexOf(',');
- int size = 1;
+ int size = originalStart;
if (endRangeCharPosition > -1) {
// The file should be at least one number wide.
assert endRangeCharPosition > 0;
@@ -235,13 +233,16 @@
}
int fileIndex = Integer.parseInt(fileAndEndRange.substring(0, endRangeCharPosition));
Source thisFileSource = builder.files.get(fileIndex);
- if (thisFileSource == null) {
- throw new KotlinSourceDebugExtensionParserException(
- "Could not find file with index " + fileIndex);
+ if (thisFileSource != null) {
+ Range range = new Range(originalStart, originalStart + size);
+ Position position = new Position(thisFileSource, range);
+ Position existingPosition = builder.positions.put(target, position);
+ assert existingPosition == null
+ : "Position index "
+ + target
+ + " was already mapped to an existing position: "
+ + position;
}
- Range range = new Range(originalStart, originalStart + (size - 1));
- Position position = new Position(thisFileSource, range);
- builder.segmentTree.add(target, target + (size - 1), position);
} catch (NumberFormatException e) {
throw new KotlinSourceDebugExtensionParserException("Could not convert position to number");
}
@@ -249,28 +250,29 @@
public static class Result {
- private final SegmentTree<Position> segmentTree;
+ private final Map<Integer, Source> files;
+ private final Map<Integer, Position> positions;
- public Result(SegmentTree<Position> segmentTree) {
- this.segmentTree = segmentTree;
+ private Result(Map<Integer, Source> files, Map<Integer, Position> positions) {
+ this.files = files;
+ this.positions = positions;
}
- public Map.Entry<Integer, Position> lookup(int point) {
- return segmentTree.findEntry(point);
+ public Map<Integer, Source> getFiles() {
+ return files;
}
- public int size() {
- return segmentTree.size();
+ public Map<Integer, Position> getPositions() {
+ return positions;
}
}
public static class ResultBuilder {
-
- SegmentTree<Position> segmentTree = new SegmentTree<>(false);
- Map<Integer, Source> files = new HashMap<>();
+ final Map<Integer, Source> files = new HashMap<>();
+ final Map<Integer, Position> positions = new HashMap<>();
public Result build() {
- return new Result(segmentTree);
+ return new Result(files, positions);
}
}
@@ -324,7 +326,6 @@
sb.append(",");
sb.append(range.to);
}
- sb.append(":");
return sb.toString();
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParserTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParserTest.java
index d7ecc12..6ad7046 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParserTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinSourceDebugExtensionParserTest.java
@@ -4,7 +4,9 @@
package com.android.tools.r8.kotlin;
+import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -13,7 +15,9 @@
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.kotlin.KotlinSourceDebugExtensionParser.Position;
import com.android.tools.r8.kotlin.KotlinSourceDebugExtensionParser.Result;
+import com.android.tools.r8.kotlin.KotlinSourceDebugExtensionParser.Source;
import com.android.tools.r8.utils.StringUtils;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -35,6 +39,7 @@
}
@Test
+ @Ignore("b/145985445")
public void testParsingNoInlineSources() {
String annotationData =
StringUtils.join(
@@ -51,16 +56,19 @@
"*E");
Result result = KotlinSourceDebugExtensionParser.parse(annotationData);
assertNotNull(result);
- assertEquals(1, result.size());
- assertEquals(1, (int) result.lookup(1).getKey());
- Position position = result.lookup(1).getValue();
- assertEquals("EnumSwitch.kt", position.getSource().getFileName());
- assertEquals("enumswitch/EnumSwitchKt", position.getSource().getPath());
+ assertEquals(1, result.getFiles().size());
+ Source source = result.getFiles().get(1);
+ assertEquals("EnumSwitch.kt", source.getFileName());
+ assertEquals("enumswitch/EnumSwitchKt", source.getPath());
+ assertTrue(result.getPositions().containsKey(1));
+ Position position = result.getPositions().get(1);
+ assertEquals(source, position.getSource());
assertEquals(1, position.getRange().from);
assertEquals(38, position.getRange().to);
}
@Test
+ @Ignore("b/145985445")
public void testParsingSimpleStrata() {
// Taken from src/test/examplesKotlin/retrace/mainKt
String annotationData =
@@ -92,33 +100,32 @@
"*E");
Result result = KotlinSourceDebugExtensionParser.parse(annotationData);
assertNotNull(result);
- assertEquals(3, result.size());
- assertEquals(1, (int) result.lookup(1).getKey());
- assertEquals(23, (int) result.lookup(23).getKey());
- assertEquals(24, (int) result.lookup(24).getKey());
-
+ assertEquals(3, result.getFiles().size());
// Check that files are correctly parsed.
- Position pos1 = result.lookup(1).getValue();
- assertEquals("Main.kt", pos1.getSource().getFileName());
- assertEquals("retrace/MainKt", pos1.getSource().getPath());
+ Source source1 = result.getFiles().get(1);
+ assertEquals("Main.kt", source1.getFileName());
+ assertEquals("retrace/MainKt", source1.getPath());
- Position pos2 = result.lookup(23).getValue();
- assertEquals("InlineFunction.kt", pos2.getSource().getFileName());
- assertEquals("retrace/InlineFunctionKt", pos2.getSource().getPath());
+ Source source2 = result.getFiles().get(2);
+ assertEquals("InlineFunction.kt", source2.getFileName());
+ assertEquals("retrace/InlineFunctionKt", source2.getPath());
- Position pos3 = result.lookup(24).getValue();
- assertEquals("InlineFunction.kt", pos3.getSource().getFileName());
- assertEquals("retrace/InlineFunction", pos3.getSource().getPath());
+ Source source3 = result.getFiles().get(3);
+ assertEquals("InlineFunction.kt", source3.getFileName());
+ assertEquals("retrace/InlineFunction", source3.getPath());
// Check that the inline positions can be traced.
- assertEquals(1, pos1.getRange().from);
- assertEquals(22, pos1.getRange().to);
+ assertTrue(result.getPositions().containsKey(23));
+ Position position1 = result.getPositions().get(23);
+ assertEquals(source2, position1.getSource());
+ assertEquals(7, position1.getRange().from);
+ assertEquals(7, position1.getRange().to);
- assertEquals(7, pos2.getRange().from);
- assertEquals(7, pos2.getRange().to);
-
- assertEquals(12, pos3.getRange().from);
- assertEquals(12, pos3.getRange().to);
+ assertTrue(result.getPositions().containsKey(24));
+ Position position2 = result.getPositions().get(24);
+ assertEquals(source3, position2.getSource());
+ assertEquals(12, position2.getRange().from);
+ assertEquals(12, position2.getRange().to);
}
@Test
@@ -279,43 +286,12 @@
"7#2:23",
"12#4:24", // <-- non-existing file index
"*E");
- assertNull(KotlinSourceDebugExtensionParser.parse(annotationData));
- }
-
- @Test
- public void testRanges() {
- String annotationData =
- StringUtils.join(
- "\n",
- "SMAP",
- "Main.kt",
- "Kotlin",
- "*S Kotlin",
- "*F",
- "+ 1 Main.kt",
- "retrace/MainKt",
- "+ 2 InlineFunction.kt",
- "retrace/InlineFunctionKt",
- "+ 3 InlineFunction.kt",
- "retrace/InlineFunction",
- "*L",
- "1#1,22:1",
- "7#2,1:23",
- "12#3,2:24",
- "*E",
- "*S KotlinDebug",
- "*F",
- "+ 1 Main.kt",
- "retrace/MainKt",
- "*L",
- "12#1:23",
- "18#1:24",
- "*E");
Result parsedResult = KotlinSourceDebugExtensionParser.parse(annotationData);
assertNotNull(parsedResult);
- assertEquals(24, (int) parsedResult.lookup(25).getKey());
- Position value = parsedResult.lookup(25).getValue();
- assertEquals(12, value.getRange().from);
- assertEquals(13, value.getRange().to);
+
+ assertEquals(2, parsedResult.getPositions().size());
+ assertTrue(parsedResult.getPositions().containsKey(1));
+ assertTrue(parsedResult.getPositions().containsKey(23));
+ assertFalse(parsedResult.getPositions().containsKey(24));
}
}