Revert "Remove KeyType from InternalState"

This reverts commit cd3c73f10816e339e53d9dc79483638c580deb7b.

Reason for revert: Failing

Change-Id: I41745b3ee684687d5e43650f83a71363970695e7
diff --git a/src/main/java/com/android/tools/r8/naming/MethodNamingState.java b/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
index c49957f..b691a5a 100644
--- a/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
@@ -12,11 +12,14 @@
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.HashBasedTable;
 import com.google.common.collect.Sets;
+import com.google.common.collect.Table;
 import java.io.PrintStream;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.function.Function;
 
@@ -72,7 +75,7 @@
     if (state == null) {
       return null;
     }
-    return state.getAssignedNameFor(name);
+    return state.getAssignedNameFor(name, key);
   }
 
   public DexString assignNewNameFor(DexMethod source, DexString original, DexProto proto) {
@@ -112,7 +115,7 @@
   public void addRenaming(DexString original, DexProto proto, DexString newName) {
     KeyType key = keyTransform.apply(proto);
     InternalState state = getOrCreateInternalStateFor(key);
-    state.addRenaming(original, newName);
+    state.addRenaming(original, key, newName);
   }
 
   void printState(
@@ -145,9 +148,9 @@
     protected final DexItemFactory itemFactory;
     private final InternalState parentInternalState;
     private Set<DexString> reservedNames = null;
-    private Map<DexString, DexString> renamings = null;
-    private int publicNameCount;
-    private int privateNameCount = 0;
+    private Table<DexString, KeyType, DexString> renamings = null;
+    private int virtualNameCount;
+    private int directNameCount = 0;
     private final Iterator<String> dictionaryIterator;
 
     private InternalState(
@@ -207,13 +210,13 @@
       }
     }
 
-    DexString getAssignedNameFor(DexString original) {
+    DexString getAssignedNameFor(DexString original, KeyType proto) {
       DexString result = null;
       if (renamings != null) {
-        result = renamings.get(original);
+        result = renamings.get(original, proto);
       }
       if (result == null && parentInternalState != null) {
-        result = parentInternalState.getAssignedNameFor(original);
+        result = parentInternalState.getAssignedNameFor(original, proto);
       }
       return result;
     }
@@ -226,11 +229,11 @@
       return name;
     }
 
-    void addRenaming(DexString original, DexString newName) {
+    void addRenaming(DexString original, KeyType proto, DexString newName) {
       if (renamings == null) {
-        renamings = new HashMap<>();
+        renamings = HashBasedTable.create();
       }
-      renamings.put(original, newName);
+      renamings.put(original, proto, newName);
     }
 
     DexString nextSuggestedName(DexMethod source) {
@@ -304,13 +307,17 @@
       if (renamings == null || renamings.isEmpty()) {
         out.print(" <NO RENAMINGS>");
       } else {
-        for (DexString original : renamings.keySet()) {
-          out.print(System.lineSeparator());
-          out.print(indentation);
-          out.print("  ");
-          out.print(original.toSourceString());
-          out.print(" -> ");
-          out.print(renamings.get(original).toSourceString());
+        for (DexString original : renamings.rowKeySet()) {
+          Map<KeyType, DexString> row = renamings.row(original);
+          for (Entry<KeyType, DexString> entry : row.entrySet()) {
+            out.print(System.lineSeparator());
+            out.print(indentation);
+            out.print("  ");
+            out.print(original.toSourceString());
+            out.print(entry.getKey().toString());
+            out.print(" -> ");
+            out.print(entry.getValue().toSourceString());
+          }
         }
       }
       out.println();