[Compose] Account for additional inline frames
Bug: b/280564959
Change-Id: If8b4cf217b5213d2a9224e43986ada186e207d80
diff --git a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
index 8be5e9a..f45b126 100644
--- a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
+++ b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
@@ -645,7 +645,8 @@
existingClassBuilder,
existingMappedRanges,
mappedRange,
- computedOutlineInformation);
+ computedOutlineInformation,
+ !composedInlineFrames.isEmpty());
composedInlineFrames = composeInlineFrames(newComposedRange, composedInlineFrames);
if (!isInlineMappedRangeForComposition(newRangesToCompose, i)) {
composedRanges.addAll(composedInlineFrames);
@@ -1082,7 +1083,8 @@
ComposingClassBuilder existingClassBuilder,
List<MappedRange> existingRanges,
MappedRange newRange,
- ComputedOutlineInformation computedOutlineInformation)
+ ComputedOutlineInformation computedOutlineInformation,
+ boolean isInlineFrame)
throws MappingComposeException {
assert newRange != null;
// If there are no existing ranges, then just return the new range.
@@ -1161,7 +1163,8 @@
existingRangesForPosition,
computedOutlineInformation,
minifiedStart,
- minifiedStart + span);
+ minifiedStart + span,
+ isInlineFrame);
minifiedStart += span + 1;
}
}
@@ -1281,7 +1284,8 @@
List<MappedRange> existingMappedRanges,
ComputedOutlineInformation computedOutlineInformation,
int lastStartingMinifiedFrom,
- int lastEndingMinifiedTo)
+ int lastEndingMinifiedTo,
+ boolean isInlineFrame)
throws MappingComposeException {
Range existingRange = existingMappedRanges.get(0).minifiedRange;
assert existingMappedRanges.stream().allMatch(x -> x.minifiedRange.equals(existingRange));
@@ -1289,18 +1293,18 @@
for (MappedRange existingMappedRange : existingMappedRanges) {
Range existingOriginalRange = existingMappedRange.getOriginalRangeOrIdentity();
Range newOriginalRange;
- if (canUseOriginalRange(
- existingOriginalRange, newMappedRange.getOriginalRangeOrIdentity())) {
+ if (newMappedRange.minifiedRange.equals(newMinifiedRange)
+ && canUseOriginalRange(
+ existingOriginalRange, newMappedRange.getOriginalRangeOrIdentity())) {
newOriginalRange = existingOriginalRange;
} else {
// Find the window that the new range points to into the original range.
int existingMinifiedPos = newMappedRange.getOriginalLineNumber(lastStartingMinifiedFrom);
int newOriginalStart = existingMappedRange.getOriginalLineNumber(existingMinifiedPos);
- if (newMappedRange.getOriginalRangeOrIdentity().span() == 1) {
- newOriginalRange =
- newMappedRange.getOriginalRangeOrIdentity().isCardinal
- ? new Range(newOriginalStart)
- : new Range(newOriginalStart, newOriginalStart);
+ if (isInlineFrame || existingOriginalRange.isCardinal) {
+ newOriginalRange = new Range(newOriginalStart);
+ } else if (newMappedRange.getOriginalRangeOrIdentity().span() == 1) {
+ newOriginalRange = new Range(newOriginalStart, newOriginalStart);
} else {
assert newMinifiedRange.span() <= existingOriginalRange.span();
newOriginalRange =
diff --git a/src/test/java/com/android/tools/r8/mappingcompose/ComposeInlineRangeOverlappingTest.java b/src/test/java/com/android/tools/r8/mappingcompose/ComposeInlineRangeOverlappingTest.java
index 7124fae..d966f3f 100644
--- a/src/test/java/com/android/tools/r8/mappingcompose/ComposeInlineRangeOverlappingTest.java
+++ b/src/test/java/com/android/tools/r8/mappingcompose/ComposeInlineRangeOverlappingTest.java
@@ -51,9 +51,8 @@
" 147:147:com.android.InternalViewOptions "
+ "com.android.InternalViewOptions.parseFromJson(org.json.JSONObject):45:45 -> e",
" 147:147:com.android.ViewOptions parseFromJson(org.json.JSONObject):97 -> e",
- // TODO(b/280564959): We should not introduce ambiguous mapping.
" 148:148:com.android.InternalViewOptions "
- + "com.android.InternalViewOptions.parseFromJson(org.json.JSONObject):47:48 -> e",
+ + "com.android.InternalViewOptions.parseFromJson(org.json.JSONObject):47:47 -> e",
" 148:148:com.android.ViewOptions parseFromJson(org.json.JSONObject):97 -> e");
@Test