Don't lookup methods on array types in tracereferences

Bug: 169127026
Bug: 169546956
Change-Id: Ie75b0f077dd84da5f0dd6a8a6bd2f8e0bb81ee80
diff --git a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
index 110fb8b..72db701 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
@@ -369,6 +369,10 @@
 
     @Override
     public void registerInvokeVirtual(DexMethod method) {
+      if (method.holder.isArrayType()) {
+        addType(method.holder);
+        return;
+      }
       ResolutionResult resolutionResult = appInfo.unsafeResolveMethodDueToDexFormat(method);
       DexEncodedMethod target =
           resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
diff --git a/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesArrayTypesTest.java b/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesArrayTypesTest.java
index 35f215e..0074a89 100644
--- a/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesArrayTypesTest.java
+++ b/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesArrayTypesTest.java
@@ -81,7 +81,9 @@
                 ToolHelper.getClassFileForTestClass(TargetReturnType.class),
                 ToolHelper.getClassFileForTestClass(TargetInstantiatedType.class),
                 ToolHelper.getClassFileForTestClass(TargetInstanceOfType.class),
-                ToolHelper.getClassFileForTestClass(TargetCheckCastType.class))
+                ToolHelper.getClassFileForTestClass(TargetCheckCastType.class),
+                ToolHelper.getClassFileForTestClass(TargetArrayCloneType.class),
+                ToolHelper.getClassFileForTestClass(TargetArrayCloneType2.class))
             .build();
     Path sourceJar =
         ZipBuilder.builder(dir.resolve("source.jar"))
@@ -101,7 +103,6 @@
             .build());
 
     assertEquals(
-        consumer.tracedTypes,
         ImmutableSet.of(
             Reference.classFromClass(Target.class),
             Reference.classFromClass(TargetFieldType.class),
@@ -109,7 +110,10 @@
             Reference.classFromClass(TargetReturnType.class),
             Reference.classFromClass(TargetInstantiatedType.class),
             Reference.classFromClass(TargetInstanceOfType.class),
-            Reference.classFromClass(TargetCheckCastType.class)));
+            Reference.classFromClass(TargetCheckCastType.class),
+            Reference.classFromClass(TargetArrayCloneType.class),
+            Reference.classFromClass(TargetArrayCloneType2.class)),
+        consumer.tracedTypes);
     assertTrue(consumer.acceptFieldCalled);
     assertTrue(consumer.acceptMethodCalled);
   }
@@ -126,6 +130,10 @@
 
   static class TargetCheckCastType {}
 
+  static class TargetArrayCloneType {}
+
+  static class TargetArrayCloneType2 {}
+
   static class Target {
     public static TargetFieldType[] field;
 
@@ -141,6 +149,8 @@
       Object x = new TargetInstantiatedType[] {};
       boolean y = null instanceof TargetInstanceOfType;
       Object z = (TargetCheckCastType) null;
+      Object c = ((TargetArrayCloneType[]) null).clone();
+      Object c2 = ((TargetArrayCloneType2[][][][]) null).clone();
     }
   }
 }