Deterministic addition of forwarding methods.

Bug: 217727847
Change-Id: I5a96c135d8aea426badb8ae5d8c5837e3d2a09a2
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
index 33f7037..da7d679 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
@@ -42,6 +42,7 @@
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.List;
@@ -408,11 +409,15 @@
 
   // We introduce forwarding methods only once all desugaring has been performed to avoid
   // confusing the look-up with inserted forwarding methods.
-  public final void finalizeProcessing(InterfaceProcessingDesugaringEventConsumer eventConsumer) {
+  public void finalizeProcessing(InterfaceProcessingDesugaringEventConsumer eventConsumer) {
     newSyntheticMethods.forEach(
         (clazz, newForwardingMethods) -> {
-          clazz.addVirtualMethods(newForwardingMethods.toDefinitionSet());
-          newForwardingMethods.forEach(eventConsumer::acceptForwardingMethod);
+          List<ProgramMethod> sorted = new ArrayList<>(newForwardingMethods.toCollection());
+          sorted.sort(Comparator.comparing(ProgramMethod::getReference));
+          for (ProgramMethod method : sorted) {
+            clazz.addVirtualMethod(method.getDefinition());
+            eventConsumer.acceptForwardingMethod(method);
+          }
         });
     newExtraInterfaceSignatures.forEach(
         (clazz, extraInterfaceSignatures) -> {
diff --git a/src/main/java/com/android/tools/r8/utils/collections/DexClassAndMethodSetBase.java b/src/main/java/com/android/tools/r8/utils/collections/DexClassAndMethodSetBase.java
index cc8bc7f..f42a8cd 100644
--- a/src/main/java/com/android/tools/r8/utils/collections/DexClassAndMethodSetBase.java
+++ b/src/main/java/com/android/tools/r8/utils/collections/DexClassAndMethodSetBase.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.utils.SetUtils;
+import java.util.Collection;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -96,6 +97,10 @@
     return backing.values().stream();
   }
 
+  public Collection<T> toCollection() {
+    return backing.values();
+  }
+
   public Set<DexEncodedMethod> toDefinitionSet() {
     assert backing instanceof IdentityHashMap;
     return toDefinitionSet(SetUtils::newIdentityHashSet);