Revert "Only allow ranges over holes when line number optimization is on"

This reverts commit 79a9c49f7a12bc5ea293cc09334159b69804e2b3.

Reason for revert: b/288405478

Change-Id: I345dc5ed313d0c9cea800dcd55afd0fc6bd68255
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 0fdb108..c6f018a 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -141,15 +141,7 @@
 
   public enum LineNumberOptimization {
     OFF,
-    ON;
-
-    public boolean isOff() {
-      return this == OFF;
-    }
-
-    public boolean isOn() {
-      return this == ON;
-    }
+    ON
   }
 
   public enum DesugarState {
@@ -2585,7 +2577,7 @@
   }
 
   public boolean canUseDexPc2PcAsDebugInformation() {
-    return isGeneratingDex() && lineNumberOptimization.isOn();
+    return isGeneratingDex() && lineNumberOptimization == LineNumberOptimization.ON;
   }
 
   // Debug entries may be dropped only if the source file content allows being omitted from
diff --git a/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java b/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
index e80a0a7..a6a2a06 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
@@ -26,6 +26,7 @@
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.SourcePosition;
+import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -175,7 +176,7 @@
 
   public DexPositionToNoPcMappedRangeMapper(AppView<?> appView) {
     this.appView = appView;
-    isIdentityMapping = appView.options().lineNumberOptimization.isOff();
+    isIdentityMapping = appView.options().lineNumberOptimization == LineNumberOptimization.OFF;
   }
 
   public List<MappedPosition> optimizeDexCodePositions(
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index 0ab3695..7fe3d32 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -1,3 +1,4 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -44,6 +45,7 @@
 import com.android.tools.r8.synthesis.SyntheticItems;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.IntBox;
+import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
 import com.android.tools.r8.utils.ListUtils;
 import com.android.tools.r8.utils.OneShotCollectionConsumer;
 import com.android.tools.r8.utils.OriginalSourceFiles;
@@ -54,7 +56,6 @@
 import it.unimi.dsi.fastutil.ints.Int2IntSortedMap;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
@@ -78,7 +79,7 @@
       PositionRangeAllocator.createCardinalPositionRangeAllocator();
   private final NonCardinalPositionRangeAllocator nonCardinalRangeCache =
       PositionRangeAllocator.createNonCardinalPositionRangeAllocator();
-  private final int maxGap;
+  private final int maxGap = 1000;
 
   private MappedPositionToClassNameMapperBuilder(
       AppView<?> appView, OriginalSourceFiles originalSourceFiles) {
@@ -87,7 +88,6 @@
     classNameMapperBuilder = ClassNameMapper.builder();
     classNameMapperBuilder.setCurrentMapVersion(
         appView.options().getMapFileVersion().toMapVersionMappingInformation());
-    maxGap = appView.options().lineNumberOptimization.isOn() ? 1000 : 1;
   }
 
   public static String getPrunedInlinedClassObfuscatedPrefix() {
@@ -246,7 +246,7 @@
           residualMethod,
           originalMethod,
           originalType)) {
-        assert appView.options().lineNumberOptimization.isOff()
+        assert appView.options().lineNumberOptimization == LineNumberOptimization.OFF
             || hasAtMostOnePosition(appView, definition)
             || appView.isCfByteCodePassThrough(definition);
         return this;
@@ -290,8 +290,6 @@
         methodSpecificMappingInformation.add(OutlineMappingInformation.builder().build());
       }
 
-      mappedPositions.sort(Comparator.comparing(MappedPosition::getObfuscatedLine));
-
       // Update memberNaming with the collected positions, merging multiple positions into a
       // single region whenever possible.
       for (int i = 0; i < mappedPositions.size(); /* updated in body */ ) {
@@ -319,7 +317,14 @@
               || firstMappedPosition.getPosition().getOutlineCallee() != null) {
             break;
           }
-          lastMappedPosition = currentMappedPosition;
+          // The mapped positions are not guaranteed to be in order, so maintain first and last
+          // position.
+          if (firstMappedPosition.getObfuscatedLine() > currentMappedPosition.getObfuscatedLine()) {
+            firstMappedPosition = currentMappedPosition;
+          }
+          if (lastMappedPosition.getObfuscatedLine() < currentMappedPosition.getObfuscatedLine()) {
+            lastMappedPosition = currentMappedPosition;
+          }
         }
         Range obfuscatedRange =
             nonCardinalRangeCache.get(
@@ -380,7 +385,9 @@
         }
         i = j;
       }
-      assert mappedPositions.size() <= 1
+      // TODO(b/287210793): Enable assertion again.
+      assert true
+          || mappedPositions.size() <= 1
           || getBuilder().hasNoOverlappingRangesForSignature(residualSignature);
       return this;
     }
diff --git a/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java b/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
index 861c9dc..3f0288f 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
@@ -20,6 +20,7 @@
 import com.android.tools.r8.utils.CfLineToMethodMapper;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
 import com.android.tools.r8.utils.Pair;
 import java.util.IdentityHashMap;
 import java.util.Map;
@@ -33,7 +34,8 @@
 
   static PositionRemapper getPositionRemapper(
       AppView<?> appView, CfLineToMethodMapper cfLineToMethodMapper) {
-    boolean identityMapping = appView.options().lineNumberOptimization.isOff();
+    boolean identityMapping =
+        appView.options().lineNumberOptimization == LineNumberOptimization.OFF;
     PositionRemapper positionRemapper =
         identityMapping
             ? new IdentityPositionRemapper()