Remove sorting of dynamic and direct targeted methods.

Bug: 132593519
Change-Id: I9c27cd076d0732ee44a4a3321450abd950c9e230
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java b/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java
index d6f0c77..9a5c390 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java
@@ -16,7 +16,7 @@
     return appView.appInfo().isPinned(method.method)
         || appView.appInfo().isBootstrapMethod(method.method)
         || appView.appInfo().failedResolutionTargets.contains(method.method)
-        || appView.appInfo().methodsTargetedByInvokeDynamic.contains(method.method)
+        || appView.appInfo().isMethodTargetedByInvokeDynamic(method.method)
         || method.accessFlags.isNative();
   }
 }
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 305bf9d..bed6243 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -110,9 +110,9 @@
   private final Set<DexMethod> bootstrapMethods;
 
   /** Set of methods that are the immediate target of an invoke-dynamic. */
-  public final SortedSet<DexMethod> methodsTargetedByInvokeDynamic;
+  private final Set<DexMethod> methodsTargetedByInvokeDynamic;
   /** Set of virtual methods that are the immediate target of an invoke-direct. */
-  final SortedSet<DexMethod> virtualMethodsTargetedByInvokeDirect;
+  private final Set<DexMethod> virtualMethodsTargetedByInvokeDirect;
   /**
    * Set of methods that belong to live classes and can be reached by invokes. These need to be
    * kept.
@@ -209,8 +209,8 @@
       Set<DexMethod> targetedMethods,
       Set<DexMethod> failedResolutionTargets,
       Set<DexMethod> bootstrapMethods,
-      SortedSet<DexMethod> methodsTargetedByInvokeDynamic,
-      SortedSet<DexMethod> virtualMethodsTargetedByInvokeDirect,
+      Set<DexMethod> methodsTargetedByInvokeDynamic,
+      Set<DexMethod> virtualMethodsTargetedByInvokeDirect,
       SortedSet<DexMethod> liveMethods,
       FieldAccessInfoCollectionImpl fieldAccessInfoCollection,
       MethodAccessInfoCollection methodAccessInfoCollection,
@@ -292,7 +292,7 @@
       Set<DexMethod> targetedMethods,
       Set<DexMethod> failedResolutionTargets,
       Set<DexMethod> bootstrapMethods,
-      SortedSet<DexMethod> methodsTargetedByInvokeDynamic,
+      Set<DexMethod> methodsTargetedByInvokeDynamic,
       SortedSet<DexMethod> virtualMethodsTargetedByInvokeDirect,
       SortedSet<DexMethod> liveMethods,
       FieldAccessInfoCollectionImpl fieldAccessInfoCollection,
@@ -635,6 +635,14 @@
     return bootstrapMethods.contains(method);
   }
 
+  public boolean isMethodTargetedByInvokeDynamic(DexMethod method) {
+    return methodsTargetedByInvokeDynamic.contains(method);
+  }
+
+  public Set<DexMethod> getVirtualMethodsTargetedByInvokeDirect() {
+    return virtualMethodsTargetedByInvokeDirect;
+  }
+
   public Collection<DexClass> computeReachableInterfaces() {
     Set<DexClass> interfaces = Sets.newIdentityHashSet();
     WorkList<DexType> worklist = WorkList.newIdentityWorkList();
@@ -1031,8 +1039,8 @@
         lens.rewriteMethods(targetedMethods),
         lens.rewriteMethodsSorted(failedResolutionTargets),
         lens.rewriteMethods(bootstrapMethods),
-        lens.rewriteMethodsSorted(methodsTargetedByInvokeDynamic),
-        lens.rewriteMethodsSorted(virtualMethodsTargetedByInvokeDirect),
+        lens.rewriteMethods(methodsTargetedByInvokeDynamic),
+        lens.rewriteMethods(virtualMethodsTargetedByInvokeDirect),
         lens.rewriteMethodsSorted(liveMethods),
         fieldAccessInfoCollection.rewrittenWithLens(definitionSupplier, lens),
         methodAccessInfoCollection.rewrittenWithLens(definitionSupplier, lens),
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 6b644bb..87ef664 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -3177,9 +3177,8 @@
             Enqueuer.toDescriptorSet(targetedMethods.getItems()),
             Collections.unmodifiableSet(failedResolutionTargets),
             Collections.unmodifiableSet(bootstrapMethods),
-            ImmutableSortedSet.copyOf(DexMethod::slowCompareTo, methodsTargetedByInvokeDynamic),
-            ImmutableSortedSet.copyOf(
-                DexMethod::slowCompareTo, virtualMethodsTargetedByInvokeDirect),
+            Collections.unmodifiableSet(methodsTargetedByInvokeDynamic),
+            Collections.unmodifiableSet(virtualMethodsTargetedByInvokeDirect),
             toSortedDescriptorSet(liveMethods.getItems()),
             // Filter out library fields and pinned fields, because these are read by default.
             fieldAccessInfoCollection,
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 9831468..b199de0 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -292,7 +292,7 @@
     // another default method in the same interface (see InterfaceMethodDesugaringTests.testInvoke-
     // SpecialToDefaultMethod). However, in a class, that would lead to a verification error.
     // Therefore, we disallow merging such interfaces into their subtypes.
-    for (DexMethod signature : appInfo.virtualMethodsTargetedByInvokeDirect) {
+    for (DexMethod signature : appInfo.getVirtualMethodsTargetedByInvokeDirect()) {
       markTypeAsPinned(signature.holder, AbortReason.UNHANDLED_INVOKE_DIRECT);
     }