Revert "Optimize empty Object[] -> null in reflection APIs"

This reverts commit b2baa96841919a9fd14102c652f2b881fb77aa15.

Reason for revert: Causes verification errors, b/395140848

Bug: b/395140848
Change-Id: I6a3311a56443f911d0179a7a40772201fb3e687a
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/ClassOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/ClassOptimizer.java
deleted file mode 100644
index db81e4b..0000000
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/ClassOptimizer.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.ir.optimize.library;
-
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClassAndMethod;
-import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.BasicBlock;
-import com.android.tools.r8.ir.code.BasicBlockIterator;
-import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.InstructionListIterator;
-import com.android.tools.r8.ir.code.InvokeMethod;
-import com.android.tools.r8.ir.optimize.AffectedValues;
-import com.android.tools.r8.utils.InternalOptions;
-import java.util.Set;
-
-public class ClassOptimizer extends StatelessLibraryMethodModelCollection {
-
-  private final InternalOptions options;
-  private final DexItemFactory dexItemFactory;
-  private final DexMethod getConstructor;
-  private final DexMethod getDeclaredConstructor;
-  private final DexMethod getMethod;
-  private final DexMethod getDeclaredMethod;
-
-  ClassOptimizer(AppView<?> appView) {
-    DexItemFactory dexItemFactory = appView.dexItemFactory();
-    this.options = appView.options();
-    this.dexItemFactory = dexItemFactory;
-    getConstructor = dexItemFactory.classMethods.getConstructor;
-    getDeclaredConstructor = dexItemFactory.classMethods.getDeclaredConstructor;
-    getMethod = dexItemFactory.classMethods.getMethod;
-    getDeclaredMethod = dexItemFactory.classMethods.getDeclaredMethod;
-  }
-
-  @Override
-  public DexType getType() {
-    return dexItemFactory.classType;
-  }
-
-  @Override
-  @SuppressWarnings("ReferenceEquality")
-  public InstructionListIterator optimize(
-      IRCode code,
-      BasicBlockIterator blockIterator,
-      InstructionListIterator instructionIterator,
-      InvokeMethod invoke,
-      DexClassAndMethod singleTarget,
-      AffectedValues affectedValues,
-      Set<BasicBlock> blocksToRemove) {
-    DexMethod singleTargetReference = singleTarget.getReference();
-    if (singleTargetReference.isIdenticalTo(getConstructor)
-        || singleTargetReference.isIdenticalTo(getDeclaredConstructor)
-        || singleTargetReference.isIdenticalTo(getMethod)
-        || singleTargetReference.isIdenticalTo(getDeclaredMethod)) {
-      EmptyVarargsUtil.replaceWithNullIfEmptyArray(
-          invoke.getLastArgument(), code, instructionIterator, options, affectedValues);
-      assert instructionIterator.peekPrevious() == invoke;
-    }
-    return instructionIterator;
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/ConstructorOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/ConstructorOptimizer.java
deleted file mode 100644
index 718ed8b..0000000
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/ConstructorOptimizer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.ir.optimize.library;
-
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClassAndMethod;
-import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.BasicBlock;
-import com.android.tools.r8.ir.code.BasicBlockIterator;
-import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.InstructionListIterator;
-import com.android.tools.r8.ir.code.InvokeMethod;
-import com.android.tools.r8.ir.optimize.AffectedValues;
-import com.android.tools.r8.utils.InternalOptions;
-import java.util.Set;
-
-public class ConstructorOptimizer extends StatelessLibraryMethodModelCollection {
-
-  private final InternalOptions options;
-  private final DexItemFactory dexItemFactory;
-  private final DexMethod newInstance;
-
-  ConstructorOptimizer(AppView<?> appView) {
-    DexItemFactory dexItemFactory = appView.dexItemFactory();
-    this.options = appView.options();
-    this.dexItemFactory = dexItemFactory;
-    newInstance = dexItemFactory.constructorMethods.newInstance;
-  }
-
-  @Override
-  public DexType getType() {
-    return dexItemFactory.constructorType;
-  }
-
-  @Override
-  @SuppressWarnings("ReferenceEquality")
-  public InstructionListIterator optimize(
-      IRCode code,
-      BasicBlockIterator blockIterator,
-      InstructionListIterator instructionIterator,
-      InvokeMethod invoke,
-      DexClassAndMethod singleTarget,
-      AffectedValues affectedValues,
-      Set<BasicBlock> blocksToRemove) {
-    DexMethod singleTargetReference = singleTarget.getReference();
-    if (singleTargetReference.isIdenticalTo(newInstance)) {
-      EmptyVarargsUtil.replaceWithNullIfEmptyArray(
-          invoke.getArgument(1), code, instructionIterator, options, affectedValues);
-      assert instructionIterator.peekPrevious() == invoke;
-    }
-    return instructionIterator;
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/EmptyVarargsUtil.java b/src/main/java/com/android/tools/r8/ir/optimize/library/EmptyVarargsUtil.java
deleted file mode 100644
index a81a0c5..0000000
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/EmptyVarargsUtil.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.ir.optimize.library;
-
-import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.Instruction;
-import com.android.tools.r8.ir.code.InstructionListIterator;
-import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.optimize.AffectedValues;
-import com.android.tools.r8.utils.InternalOptions;
-
-public class EmptyVarargsUtil {
-  public static void replaceWithNullIfEmptyArray(
-      Value value,
-      IRCode code,
-      InstructionListIterator instructionIterator,
-      InternalOptions options,
-      AffectedValues affectedValues) {
-    if (value.isDefinedByInstructionSatisfying(Instruction::isNewArrayEmpty)
-        && value.definition.asNewArrayEmpty().sizeIfConst() == 0) {
-      instructionIterator.previous();
-      value.replaceUsers(
-          instructionIterator.insertConstNullInstruction(code, options), affectedValues);
-      instructionIterator.next();
-    }
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMemberOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMemberOptimizer.java
index 788cbf6..cadab0f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMemberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMemberOptimizer.java
@@ -46,12 +46,9 @@
     this.appView = appView;
     timing.begin("Register optimizers");
     PrimitiveMethodOptimizer.forEachPrimitiveOptimizer(appView, this::register);
-    register(new ClassOptimizer(appView));
     register(new CollectionsOptimizer(appView));
-    register(new ConstructorOptimizer(appView));
     register(new ListOptimizer(appView));
     register(new MapOptimizer(appView));
-    register(new MethodOptimizer(appView));
     register(new ObjectMethodOptimizer(appView));
     register(new ObjectsMethodOptimizer(appView));
     register(new SetOptimizer(appView));
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/MethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/MethodOptimizer.java
deleted file mode 100644
index 78b0149..0000000
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/MethodOptimizer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.ir.optimize.library;
-
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClassAndMethod;
-import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.BasicBlock;
-import com.android.tools.r8.ir.code.BasicBlockIterator;
-import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.InstructionListIterator;
-import com.android.tools.r8.ir.code.InvokeMethod;
-import com.android.tools.r8.ir.optimize.AffectedValues;
-import com.android.tools.r8.utils.InternalOptions;
-import java.util.Set;
-
-public class MethodOptimizer extends StatelessLibraryMethodModelCollection {
-
-  private final InternalOptions options;
-  private final DexItemFactory dexItemFactory;
-  private final DexMethod invoke;
-
-  MethodOptimizer(AppView<?> appView) {
-    DexItemFactory dexItemFactory = appView.dexItemFactory();
-    this.options = appView.options();
-    this.dexItemFactory = dexItemFactory;
-    invoke = dexItemFactory.methodMethods.invoke;
-  }
-
-  @Override
-  public DexType getType() {
-    return dexItemFactory.methodType;
-  }
-
-  @Override
-  @SuppressWarnings("ReferenceEquality")
-  public InstructionListIterator optimize(
-      IRCode code,
-      BasicBlockIterator blockIterator,
-      InstructionListIterator instructionIterator,
-      InvokeMethod invoke,
-      DexClassAndMethod singleTarget,
-      AffectedValues affectedValues,
-      Set<BasicBlock> blocksToRemove) {
-    DexMethod singleTargetReference = singleTarget.getReference();
-    if (singleTargetReference.isIdenticalTo(this.invoke)) {
-      EmptyVarargsUtil.replaceWithNullIfEmptyArray(
-          invoke.getArgument(2), code, instructionIterator, options, affectedValues);
-      assert instructionIterator.peekPrevious() == invoke;
-    }
-    return instructionIterator;
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/library/EmptyVarargsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/library/EmptyVarargsTest.java
index 2384387..ea72d77 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/library/EmptyVarargsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/library/EmptyVarargsTest.java
@@ -53,9 +53,9 @@
 
               MethodSubject testMethod =
                   mainClassSubject.uniqueMethodWithOriginalName("testDeclared");
-              assertTrue(testMethod.streamInstructions().noneMatch(InstructionSubject::isNewArray));
+              assertTrue(testMethod.streamInstructions().anyMatch(InstructionSubject::isNewArray));
               testMethod = mainClassSubject.uniqueMethodWithOriginalName("testNonDeclared");
-              assertTrue(testMethod.streamInstructions().noneMatch(InstructionSubject::isNewArray));
+              assertTrue(testMethod.streamInstructions().anyMatch(InstructionSubject::isNewArray));
             })
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines("hi", "hi");