Temporarily disable horizontal class merging in presence of unused argument removal
Change-Id: Id1ef52e70090f4704210fd40b1cbfc4308e9b4db
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
index 0821a4c..6db4dc6 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
@@ -27,6 +27,7 @@
import com.android.tools.r8.horizontalclassmerging.policies.NoNativeMethods;
import com.android.tools.r8.horizontalclassmerging.policies.NoServiceLoaders;
import com.android.tools.r8.horizontalclassmerging.policies.NoStaticClassInitializer;
+import com.android.tools.r8.horizontalclassmerging.policies.NoUnusedArguments;
import com.android.tools.r8.horizontalclassmerging.policies.NotMatchedByNoHorizontalClassMerging;
import com.android.tools.r8.horizontalclassmerging.policies.NotVerticallyMergedIntoSubtype;
import com.android.tools.r8.horizontalclassmerging.policies.PreserveMethodCharacteristics;
@@ -121,6 +122,7 @@
new NoKeepRules(appView),
new NoKotlinMetadata(),
new NoKotlinLambdas(appView),
+ new NoUnusedArguments(appView),
new NoServiceLoaders(appView),
new NotVerticallyMergedIntoSubtype(appView),
new NoDirectRuntimeTypeChecks(runtimeTypeCheckInfo),
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoUnusedArguments.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoUnusedArguments.java
new file mode 100644
index 0000000..907c855
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoUnusedArguments.java
@@ -0,0 +1,33 @@
+// Copyright (c) 2020, 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.horizontalclassmerging.policies;
+
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexEncodedMethod;
+import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.graph.RewrittenPrototypeDescription;
+import com.android.tools.r8.horizontalclassmerging.SingleClassPolicy;
+import com.android.tools.r8.shaking.AppInfoWithLiveness;
+
+public class NoUnusedArguments extends SingleClassPolicy {
+
+ private final AppView<AppInfoWithLiveness> appView;
+
+ public NoUnusedArguments(AppView<AppInfoWithLiveness> appView) {
+ this.appView = appView;
+ }
+
+ @Override
+ public boolean canMerge(DexProgramClass program) {
+ for (DexEncodedMethod method : program.methods()) {
+ RewrittenPrototypeDescription prototypeChanges =
+ appView.graphLens().lookupPrototypeChangesForMethodDefinition(method.getReference());
+ if (prototypeChanges.getArgumentInfoCollection().numberOfRemovedArguments() > 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+}