Use type conversion utilities from ASM in ClassFileTransformer

Bug: 154678587
Change-Id: I59aecba6fbebf7c14a0b6407c309387841e11279
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
index 83cbd4d..97d0029 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
@@ -217,7 +217,7 @@
 
         // Detach the dead successors from the graph, and record that we need to remove unreachable
         // blocks in the end.
-        IntList successorIndicesToRemove = new IntArrayList();
+        IntList successorIndicesToRemove = new IntArrayList(numberOfNormalSuccessors);
         for (int i = 0; i < numberOfNormalSuccessors; i++) {
           if (deadBlockIndices[i] == 1) {
             BasicBlock successor = block.getSuccessors().get(i + numberOfExceptionalSuccessors);
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index 5ff1d2a..196091e 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -342,39 +342,9 @@
     return className.replace(DESCRIPTOR_PACKAGE_SEPARATOR, JAVA_PACKAGE_SEPARATOR);
   }
 
-  public static String getBinaryNameFromDescriptor(String descriptor) {
-    int numberOfLeadingSquareBrackets = getNumberOfLeadingSquareBrackets(descriptor);
-    if (numberOfLeadingSquareBrackets > 0) {
-      assert isClassDescriptor(descriptor.substring(numberOfLeadingSquareBrackets));
-      return descriptor.substring(0, numberOfLeadingSquareBrackets)
-          + descriptor.substring(numberOfLeadingSquareBrackets + 1, descriptor.length() - 1);
-    }
-    assert isClassDescriptor(descriptor);
-    return descriptor.substring(1, descriptor.length() - 1);
-  }
-
-  /**
-   * Convert an array or a class binary name to a descriptor.
-   *
-   * @param binaryName binary name i.e. "java/lang/Object" or "Ljava/lang/Object"
-   * @return a descriptor i.e. "Ljava/lang/Object;" or "[Ljava/lang/Object;
-   */
-  public static String getDescriptorFromArrayOrClassBinaryName(String binaryName) {
-    assert binaryName != null;
-    int numberOfLeadingSquareBrackets = getNumberOfLeadingSquareBrackets(binaryName);
-    if (numberOfLeadingSquareBrackets > 0) {
-      return binaryName.substring(0, numberOfLeadingSquareBrackets)
-          + getDescriptorFromClassBinaryName(binaryName.substring(numberOfLeadingSquareBrackets));
-    }
-    return getDescriptorFromClassBinaryName(binaryName);
-  }
-
-  private static int getNumberOfLeadingSquareBrackets(String string) {
-    int leadingSquareBrackets = 0;
-    while (string.charAt(leadingSquareBrackets) == '[') {
-      leadingSquareBrackets++;
-    }
-    return leadingSquareBrackets;
+  public static String getBinaryNameFromDescriptor(String classDescriptor) {
+    assert isClassDescriptor(classDescriptor);
+    return classDescriptor.substring(1, classDescriptor.length() - 1);
   }
 
   /**
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
index c386d75..7b0e410 100644
--- a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
+++ b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
@@ -5,7 +5,6 @@
 
 import static com.android.tools.r8.references.Reference.classFromTypeName;
 import static com.android.tools.r8.utils.DescriptorUtils.getBinaryNameFromDescriptor;
-import static com.android.tools.r8.utils.DescriptorUtils.getDescriptorFromArrayOrClassBinaryName;
 import static com.android.tools.r8.utils.StringUtils.replaceAll;
 import static org.objectweb.asm.Opcodes.ASM7;
 
@@ -468,11 +467,7 @@
           public void visitFieldInsn(int opcode, String owner, String name, String descriptor) {
             super.visitFieldInsn(
                 opcode,
-                getBinaryNameFromDescriptor(
-                    replaceAll(
-                        getDescriptorFromArrayOrClassBinaryName(owner),
-                        oldDescriptor,
-                        newDescriptor)),
+                rewriteASMInternalTypeName(owner),
                 name,
                 replaceAll(descriptor, oldDescriptor, newDescriptor));
           }
@@ -493,13 +488,7 @@
               int opcode, String owner, String name, String descriptor, boolean isInterface) {
             super.visitMethodInsn(
                 opcode,
-                DescriptorUtils.isDescriptor(owner)
-                    ? replaceAll(owner, oldDescriptor, newDescriptor)
-                    : getBinaryNameFromDescriptor(
-                        replaceAll(
-                            getDescriptorFromArrayOrClassBinaryName(owner),
-                            oldDescriptor,
-                            newDescriptor)),
+                rewriteASMInternalTypeName(owner),
                 name,
                 replaceAll(descriptor, oldDescriptor, newDescriptor),
                 isInterface);
@@ -507,15 +496,14 @@
 
           @Override
           public void visitTypeInsn(int opcode, String type) {
-            super.visitTypeInsn(
-                opcode,
-                DescriptorUtils.isDescriptor(type)
-                    ? replaceAll(type, oldDescriptor, newDescriptor)
-                    : getBinaryNameFromDescriptor(
-                        replaceAll(
-                            getDescriptorFromArrayOrClassBinaryName(type),
-                            oldDescriptor,
-                            newDescriptor)));
+            super.visitTypeInsn(opcode, rewriteASMInternalTypeName(type));
+          }
+
+          private String rewriteASMInternalTypeName(String type) {
+            return Type.getType(
+                    replaceAll(
+                        Type.getObjectType(type).getDescriptor(), oldDescriptor, newDescriptor))
+                .getInternalName();
           }
         });
   }