Remove use of Hashtable

The Hashtable class is deprecated. This CL replaces its usage by
either by HashMap or Int2IntArrayMap.

Change-Id: I17793081eeb2cb756aff473d29963e4c2279d696
diff --git a/src/main/java/com/android/tools/r8/dex/DexFileReader.java b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
index 8175834..770afdf 100644
--- a/src/main/java/com/android/tools/r8/dex/DexFileReader.java
+++ b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
@@ -53,6 +53,7 @@
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.logging.Log;
 import com.android.tools.r8.utils.ProgramResource.Kind;
+import it.unimi.dsi.fastutil.ints.Int2IntArrayMap;
 import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
 import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
 import java.io.ByteArrayOutputStream;
@@ -62,7 +63,6 @@
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Hashtable;
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
@@ -751,7 +751,7 @@
         file.getUshort();  // Skip padding ushort
       }
       if (triesSize > 0) {
-        Hashtable<Integer, Integer> handlerMap = new Hashtable<>();
+        Int2IntArrayMap handlerMap = new Int2IntArrayMap();
         // tries: try_item[tries_size].
         for (int i = 0; i < triesSize; i++) {
           int startAddr = file.getUint();
diff --git a/src/main/java/com/android/tools/r8/dex/FileWriter.java b/src/main/java/com/android/tools/r8/dex/FileWriter.java
index da3722f..41f9748 100644
--- a/src/main/java/com/android/tools/r8/dex/FileWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/FileWriter.java
@@ -63,7 +63,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
@@ -1024,8 +1024,8 @@
         = createObject2IntMap();
     private final Object2IntMap<DexProgramClass> classesWithData = createObject2IntMap();
     private final Object2IntMap<DexEncodedArray> encodedArrays = createObject2IntMap();
-    private final Hashtable<DexProgramClass, DexAnnotationDirectory> clazzToAnnotationDirectory
-        = new Hashtable<>();
+    private final Map<DexProgramClass, DexAnnotationDirectory> clazzToAnnotationDirectory
+        = new HashMap<>();
 
     private static <T> Object2IntMap<T> createObject2IntMap() {
       Object2IntMap<T> result = new Object2IntLinkedOpenHashMap<>();
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java b/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java
index 093442b..a2caf1d 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java
@@ -8,7 +8,7 @@
 import com.google.common.collect.Sets;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.IdentityHashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
@@ -18,7 +18,7 @@
   // Set of missing classes, discovered during subtypeMap computation.
   private Set<DexType> missingClasses = Sets.newIdentityHashSet();
   // Map from types to their subtypes.
-  private final Hashtable<DexType, ImmutableSet<DexType>> subtypeMap = new Hashtable<>();
+  private final Map<DexType, ImmutableSet<DexType>> subtypeMap = new IdentityHashMap<>();
 
   public AppInfoWithSubtyping(DexApplication application) {
     super(application);
@@ -57,7 +57,7 @@
     return subtypes == null ? ImmutableSet.of() : subtypes;
   }
 
-  private void populateSuperType(Hashtable<DexType, Set<DexType>> map, DexType superType,
+  private void populateSuperType(Map<DexType, Set<DexType>> map, DexType superType,
       DexClass baseClass, Function<DexType, DexClass> definitions) {
     if (superType != null) {
       Set<DexType> set = map.computeIfAbsent(superType, ignore -> new HashSet<>());
@@ -68,7 +68,7 @@
     }
   }
 
-  private void populateAllSuperTypes(Hashtable<DexType, Set<DexType>> map, DexType holder,
+  private void populateAllSuperTypes(Map<DexType, Set<DexType>> map, DexType holder,
       DexClass baseClass, Function<DexType, DexClass> definitions) {
     DexClass holderClass = definitions.apply(holder);
     // Skip if no corresponding class is found.
@@ -98,7 +98,7 @@
   private void populateSubtypeMap(DirectMappedDexApplication app, DexItemFactory dexItemFactory) {
     dexItemFactory.clearSubtypeInformation();
     dexItemFactory.objectType.tagAsSubtypeRoot();
-    Hashtable<DexType, Set<DexType>> map = new Hashtable<>();
+    Map<DexType, Set<DexType>> map = new IdentityHashMap<>();
     for (DexClass clazz : Iterables.<DexClass>concat(app.classes(), app.libraryClasses())) {
       populateAllSuperTypes(map, clazz.type, clazz, app::definitionFor);
     }
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 9267f7d..6a2fcbf 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -17,11 +17,11 @@
 import com.android.tools.r8.naming.ClassNameMapper;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.StringUtils;
+import it.unimi.dsi.fastutil.ints.Int2IntMap;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
@@ -359,7 +359,7 @@
       this.handlerIndex = NO_INDEX;
     }
 
-    public void setHandlerIndex(Hashtable<Integer, Integer> map) {
+    public void setHandlerIndex(Int2IntMap map) {
       handlerIndex = map.get(handlerOffset);
     }
 
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
index 504cc4a..1360964 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
@@ -17,7 +17,7 @@
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.function.Consumer;
 
@@ -26,7 +26,7 @@
   private final ImmutableMap<String, ClassNaming> classNameMappings;
   private ImmutableBiMap<String, String> nameMapping;
 
-  private Hashtable<Signature, Signature> signatureMap = new Hashtable<>();
+  private Map<Signature, Signature> signatureMap = new HashMap<>();
 
   ClassNameMapper(Map<String, ClassNaming> classNameMappings) {
     this.classNameMappings = ImmutableMap.copyOf(classNameMappings);