Version 1.6.56

Cherry pick: Support checksums for classes with non-ascii names.

CL: https://r8-review.googlesource.com/c/r8/+/47136
Bug: 146597396
Change-Id: Ie5d0320400a2dfac1532575a69c8c6e382ad7e10
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index f19e454..8e7e7fd 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.6.55";
+  public static final String LABEL = "1.6.56";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index c62df61..3ec1a7f 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -47,8 +47,8 @@
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.google.common.collect.ObjectArrays;
-import it.unimi.dsi.fastutil.objects.Object2LongMap;
-import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
+import it.unimi.dsi.fastutil.objects.Reference2LongMap;
+import it.unimi.dsi.fastutil.objects.Reference2LongOpenHashMap;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -200,14 +200,15 @@
    */
   private void encodeChecksums(Iterable<VirtualFile> files) {
     List<DexProgramClass> classes = application.classes();
-    Object2LongMap<String> inputChecksums = new Object2LongOpenHashMap<>(classes.size());
+    Reference2LongMap<DexString> inputChecksums = new Reference2LongOpenHashMap<>(classes.size());
     for (DexProgramClass clazz : classes) {
-      inputChecksums.put(clazz.getType().descriptor.toASCIIString(), clazz.getChecksum());
+      inputChecksums.put(clazz.getType().descriptor, clazz.getChecksum());
     }
     for (VirtualFile file : files) {
       ClassesChecksum toWrite = new ClassesChecksum();
-      for (String desc : file.getClassDescriptors()) {
-        toWrite.addChecksum(desc, inputChecksums.getLong(desc));
+      for (DexProgramClass clazz : file.classes()) {
+        DexString desc = clazz.type.descriptor;
+        toWrite.addChecksum(desc.toString(), inputChecksums.getLong(desc));
       }
       file.injectString(application.dexItemFactory.createString(toWrite.toJsonString()));
     }
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index 9085e5a..b345994 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -716,7 +716,7 @@
 
       Long checksum = null;
       if (checksums != null && !checksums.isEmpty()) {
-        String desc = type.descriptor.toASCIIString();
+        String desc = type.toDescriptorString();
         checksum = checksums.getOrDefault(desc, null);
         if (!options.dexClassChecksumFilter.test(desc, checksum)) {
           continue;