Rewrite Objects.requireNonNull with one argument to getClass

When library desugaring is used with java.util.Objects enabled this
will cause Objects.requireNonNull with one argument to still be
backported and not use j$.util.Objects.requireNonNull. The backporting
will rewrite to getClass.

For java.util.Objects.requireNonNull with more arguments nothing is
changed and they will still use j$.util.Objects.requireNonNull if
java.util.Objects is enabled for library desugaring.

Bug: 175693719
Change-Id: Iea3c1a895460f894abe5523265189ddb41a21630
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index d6adc3c..40b18c9 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -1312,15 +1312,20 @@
         // TODO(b/174453232): Remove this after the configuration file format has bee updated
         // with the "rewrite_method" section.
         if (generator.method.getHolderType() == appView.dexItemFactory().objectsType) {
-          // Still backport the new API level 30 methods.
+          // Still backport the new API level 30 methods and Objects.requireNonNull taking
+          // one argument.
           String methodName = generator.method.getName().toString();
-          if (!methodName.equals("requireNonNullElse")
+          if (!methodName.equals("requireNonNull")
+              && !methodName.equals("requireNonNullElse")
               && !methodName.equals("requireNonNullElseGet")
               && !methodName.equals("checkIndex")
               && !methodName.equals("checkFromToIndex")
               && !methodName.equals("checkFromIndexSize")) {
             return;
           }
+          if (methodName.equals("requireNonNull") && generator.method.getArity() != 1) {
+            return;
+          }
         }
       }
       MethodProvider replaced = rewritable.put(generator.method, generator);
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
index a9590a3..8031f43 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
@@ -115,6 +115,10 @@
     return invokesMethod("int", holder, "hashCode", ImmutableList.of("java.lang.Object"));
   }
 
+  private Matcher<MethodSubject> invokesClassGetClass() {
+    return invokesMethod("java.lang.Class", "java.lang.Object", "getClass", ImmutableList.of());
+  }
+
   private Matcher<MethodSubject> invokesObjectsRequireNonNull(String holder) {
     return invokesMethod(
         "java.lang.Object", holder, "requireNonNull", ImmutableList.of("java.lang.Object"));
@@ -218,7 +222,7 @@
         onlyIf(invokeJavaUtilObjects, invokesObjectsRequireNonNull("java.util.Objects")));
     assertThat(
         testClass.uniqueMethodWithName("objectsRequireNonNull"),
-        onlyIf(invokeJDollarUtilObjects, invokesObjectsRequireNonNull("j$.util.Objects")));
+        onlyIf(parameters.getApiLevel().isLessThan(AndroidApiLevel.K), invokesClassGetClass()));
 
     assertThat(
         testClass.uniqueMethodWithName("objectsRequireNonNullWithMessage"),
@@ -525,7 +529,7 @@
       objectsEquals(args, args);
       objectsHash(1, 2);
       objectsHashCode(4);
-      objectsRequireNonNull(null);
+      objectsRequireNonNull(System.currentTimeMillis() >= 0 ? null : new Object());
       objectsRequireNonNullWithMessage(null, "Was null");
       if (objectsRequireNonNullWithSupplierSupported) {
         objectsRequireNonNullWithSupplier(null, () -> "Supplier said was null");