Fix redundant uses of toArrayType

Change-Id: I7f21ba98483eb011dc2c6d201cb879c7d5034a93
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index e625d5a..739a874 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -815,7 +815,7 @@
           addInstruction(new CfConstNumber(operand, ValueType.INT));
           break;
         case Opcodes.NEWARRAY:
-          addInstruction(new CfNewArray(arrayTypeDesc(operand, factory).toArrayType(factory)));
+          addInstruction(new CfNewArray(arrayTypeDesc(operand, factory)));
           break;
         default:
           throw new Unreachable("Unexpected int opcode " + opcode);
@@ -825,21 +825,21 @@
     private static DexType arrayTypeDesc(int arrayTypeCode, DexItemFactory factory) {
       switch (arrayTypeCode) {
         case Opcodes.T_BOOLEAN:
-          return factory.booleanType;
+          return factory.booleanArrayType;
         case Opcodes.T_CHAR:
-          return factory.charType;
+          return factory.charArrayType;
         case Opcodes.T_FLOAT:
-          return factory.floatType;
+          return factory.floatArrayType;
         case Opcodes.T_DOUBLE:
-          return factory.doubleType;
+          return factory.doubleArrayType;
         case Opcodes.T_BYTE:
-          return factory.byteType;
+          return factory.byteArrayType;
         case Opcodes.T_SHORT:
-          return factory.shortType;
+          return factory.shortArrayType;
         case Opcodes.T_INT:
-          return factory.intType;
+          return factory.intArrayType;
         case Opcodes.T_LONG:
-          return factory.longType;
+          return factory.longArrayType;
         default:
           throw new Unreachable("Unexpected array-type code " + arrayTypeCode);
       }
@@ -886,27 +886,31 @@
 
     @Override
     public void visitTypeInsn(int opcode, String typeName) {
-      DexType type = factory.createType(Type.getObjectType(typeName).getDescriptor());
-      switch (opcode) {
-        case Opcodes.NEW:
-          // A label is only required if this uninitialized-new instance flows into a frame.
-          CfNew cfNew = new CfNew(type, currentLabel);
-          if (cfNew.hasLabel()) {
-            labelToNewMap.put(cfNew.getLabel(), cfNew);
-          }
-          addInstruction(cfNew);
-          break;
-        case Opcodes.ANEWARRAY:
-          addInstruction(new CfNewArray(type.toArrayType(factory)));
-          break;
-        case Opcodes.CHECKCAST:
-          addInstruction(new CfCheckCast(type));
-          break;
-        case Opcodes.INSTANCEOF:
-          addInstruction(new CfInstanceOf(type));
-          break;
-        default:
-          throw new Unreachable("Unexpected TypeInsn opcode: " + opcode);
+      String descriptor = Type.getObjectType(typeName).getDescriptor();
+      if (opcode == Opcodes.ANEWARRAY) {
+        String arrayDescriptor = DescriptorUtils.toArrayDescriptor(1, descriptor);
+        DexType arrayType = factory.createType(arrayDescriptor);
+        addInstruction(new CfNewArray(arrayType));
+      } else {
+        DexType type = factory.createType(descriptor);
+        switch (opcode) {
+          case Opcodes.NEW:
+            // A label is only required if this uninitialized-new instance flows into a frame.
+            CfNew cfNew = new CfNew(type, currentLabel);
+            if (cfNew.hasLabel()) {
+              labelToNewMap.put(cfNew.getLabel(), cfNew);
+            }
+            addInstruction(cfNew);
+            break;
+          case Opcodes.CHECKCAST:
+            addInstruction(new CfCheckCast(type));
+            break;
+          case Opcodes.INSTANCEOF:
+            addInstruction(new CfInstanceOf(type));
+            break;
+          default:
+            throw new Unreachable("Unexpected TypeInsn opcode: " + opcode);
+        }
       }
     }