Keep track of members by name for faster field lookup

Bug: 144151634
Change-Id: I1ce55fabc7c3edc6a77bacdabbe23e7ee005cfe4
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNamingForNameMapper.java b/src/main/java/com/android/tools/r8/naming/ClassNamingForNameMapper.java
index 5ccf3e8..226a5f9 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNamingForNameMapper.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNamingForNameMapper.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.naming.MemberNaming.Signature.SignatureKind;
 import com.android.tools.r8.utils.ThrowingConsumer;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
@@ -30,9 +31,10 @@
   public static class Builder extends ClassNaming.Builder {
     private final String originalName;
     private final String renamedName;
-    private final Map<MethodSignature, MemberNaming> methodMembers = new HashMap<>();
-    private final Map<FieldSignature, MemberNaming> fieldMembers = new HashMap<>();
-    private final Map<String, List<MappedRange>> mappedRangesByName = new HashMap<>();
+    private final Map<MethodSignature, MemberNaming> methodMembers = Maps.newHashMap();
+    private final Map<FieldSignature, MemberNaming> fieldMembers = Maps.newHashMap();
+    private final Map<String, List<MappedRange>> mappedRangesByName = Maps.newHashMap();
+    private final Map<String, List<MemberNaming>> mappedNamingsByName = Maps.newHashMap();
 
     private Builder(String renamedName, String originalName) {
       this.originalName = originalName;
@@ -46,6 +48,9 @@
       } else {
         fieldMembers.put((FieldSignature) entry.getRenamedSignature(), entry);
       }
+      mappedNamingsByName
+          .computeIfAbsent(entry.getRenamedName(), m -> new ArrayList<>())
+          .add(entry);
       return this;
     }
 
@@ -63,7 +68,7 @@
       }
 
       return new ClassNamingForNameMapper(
-          renamedName, originalName, methodMembers, fieldMembers, map);
+          renamedName, originalName, methodMembers, fieldMembers, map, mappedNamingsByName);
     }
 
     /** The parameters are forwarded to MappedRange constructor, see explanation there. */
@@ -192,17 +197,21 @@
   /** Map of renamed name -> MappedRangesOfName */
   public final Map<String, MappedRangesOfName> mappedRangesByRenamedName;
 
+  public final Map<String, List<MemberNaming>> mappedNamingsByName;
+
   private ClassNamingForNameMapper(
       String renamedName,
       String originalName,
       Map<MethodSignature, MemberNaming> methodMembers,
       Map<FieldSignature, MemberNaming> fieldMembers,
-      Map<String, MappedRangesOfName> mappedRangesByRenamedName) {
+      Map<String, MappedRangesOfName> mappedRangesByRenamedName,
+      Map<String, List<MemberNaming>> mappedNamingsByName) {
     this.renamedName = renamedName;
     this.originalName = originalName;
     this.methodMembers = ImmutableMap.copyOf(methodMembers);
     this.fieldMembers = ImmutableMap.copyOf(fieldMembers);
     this.mappedRangesByRenamedName = mappedRangesByRenamedName;
+    this.mappedNamingsByName = mappedNamingsByName;
   }
 
   @Override