Allow repackaging if referencing Array.clone

Bug: 197482897
Change-Id: Icabcb287998e69eb628cada46c578e9a2b6be1bb
diff --git a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
index 03627d7..702d1fd 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
@@ -66,10 +66,6 @@
     return false;
   }
 
-  public boolean isFailedResolution() {
-    return false;
-  }
-
   public DexClass getInitialResolutionHolder() {
     return null;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java b/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java
index c3f3c42..e5467ff 100644
--- a/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java
@@ -25,6 +25,15 @@
     return isAccessibleFrom(context, appView.appInfo());
   }
 
+  /**
+   * Returns true if resolution failed.
+   *
+   * <p>Note the disclaimer in the doc of {@code MethodResolutionResult.isSingleResolution()}.
+   */
+  public boolean isFailedResolution() {
+    return false;
+  }
+
   public boolean isFieldResolutionResult() {
     return false;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java b/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
index f1e8ae1..c2cb1d4 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
@@ -59,15 +59,6 @@
     return null;
   }
 
-  /**
-   * Returns true if resolution failed.
-   *
-   * <p>Note the disclaimer in the doc of {@code isSingleResolution()}.
-   */
-  public boolean isFailedResolution() {
-    return false;
-  }
-
   public boolean isIncompatibleClassChangeErrorResult() {
     return false;
   }
@@ -84,6 +75,10 @@
     return false;
   }
 
+  public boolean isArrayCloneMethodResult() {
+    return false;
+  }
+
   /** Returns non-null if isFailedResolution() is true, otherwise null. */
   public FailedResolutionResult asFailedResolution() {
     return null;
@@ -808,6 +803,11 @@
     public boolean isVirtualTarget() {
       return true;
     }
+
+    @Override
+    public boolean isArrayCloneMethodResult() {
+      return true;
+    }
   }
 
   /** Base class for all types of failed resolutions. */
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
index 2e7b6b5..a0ac6e8 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
@@ -128,6 +128,7 @@
       }
       MethodResolutionResult methodResult = resolutionResult.asMethodResolutionResult();
       if (methodResult.isClassNotFoundResult()
+          || methodResult.isArrayCloneMethodResult()
           || methodResult.isNoSuchMethodErrorResult(context.getContextClass(), appInfo)) {
         return;
       }
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageCloneTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageCloneTest.java
index 7c138ee..722a9cc 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageCloneTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageCloneTest.java
@@ -39,10 +39,9 @@
         .compile()
         .inspect(
             inspector -> {
-              // TODO(b/197482897) This should be repackaged.
-              assertThat(A.class, isNotRepackaged(inspector));
+              assertThat(A.class, isRepackaged(inspector));
               assertThat(B.class, isRepackaged(inspector));
-              assertThat(C.class, isNotRepackaged(inspector));
+              assertThat(C.class, isRepackaged(inspector));
             })
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines("foo", "null");