Fix non-public override of interface method after class merging

Bug: 203446070
Change-Id: I701371da31c114b02db4ee8b332b75008c0d68be
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoWeakerAccessPrivileges.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoWeakerAccessPrivileges.java
index 6fcb172..399e807 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoWeakerAccessPrivileges.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoWeakerAccessPrivileges.java
@@ -14,7 +14,6 @@
 import com.android.tools.r8.horizontalclassmerging.MultiClassPolicy;
 import com.android.tools.r8.optimize.argumentpropagation.utils.ProgramClassesBidirectedGraph;
 import com.android.tools.r8.utils.collections.DexMethodSignatureSet;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
 import java.util.Collection;
 import java.util.IdentityHashMap;
@@ -44,11 +43,6 @@
 
   @Override
   public Collection<MergeGroup> apply(MergeGroup group) {
-    // This policy is specific to issues that may arise from merging interfaces.
-    if (group.isClassGroup()) {
-      return ImmutableList.of(group);
-    }
-
     List<MergeGroup> newMergeGroups = new LinkedList<>();
     Map<MergeGroup, DexMethodSignatureSet> inheritedInterfaceMethodsPerGroup =
         new IdentityHashMap<>();
@@ -122,8 +116,10 @@
         DexClass::isInterface,
         superclass ->
             inheritedInterfaceMethods.addAll(getOrComputeInheritedInterfaceMethods(superclass)));
-    clazz.forEachClassMethodMatching(
-        DexEncodedMethod::belongsToVirtualPool, inheritedInterfaceMethods::add);
+    if (clazz.isInterface()) {
+      clazz.forEachClassMethodMatching(
+          DexEncodedMethod::belongsToVirtualPool, inheritedInterfaceMethods::add);
+    }
     inheritedInterfaceMethodsCache.put(clazz, inheritedInterfaceMethods);
     return inheritedInterfaceMethods;
   }
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
index daaefdf..f540d9d 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
@@ -9,6 +9,7 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
 import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NeverClassInline;
@@ -19,6 +20,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.HorizontallyMergedClassesInspector;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -42,8 +44,7 @@
         .addInnerClasses(getClass())
         .addKeepMainRule(Main.class)
         .addHorizontallyMergedClassesInspector(
-            inspector ->
-                inspector.assertIsCompleteMergeGroup(A.class, X.class).assertNoOtherClassesMerged())
+            HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
@@ -58,21 +59,12 @@
 
               ClassSubject aClassSubject = inspector.clazz(A.class);
               assertThat(aClassSubject, isPresent());
-              assertThat(aClassSubject, isImplementing(iClassSubject));
+              assertThat(aClassSubject, not(isImplementing(iClassSubject)));
               assertThat(
                   aClassSubject.uniqueMethodWithName("m"), allOf(isPresent(), isPackagePrivate()));
             })
         .run(parameters.getRuntime(), Main.class)
-        .applyIf(
-            parameters.isCfRuntime(),
-            runResult -> runResult.assertSuccessWithOutputLines("A.m()", "Y.m()"),
-            runResult ->
-                runResult.applyIf(
-                    parameters.getDexRuntimeVersion().isDalvik(),
-                    ignore ->
-                        runResult.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
-                    ignore ->
-                        runResult.assertFailureWithErrorThatThrows(IllegalAccessError.class)));
+        .assertSuccessWithOutputLines("A.m()", "Y.m()");
   }
 
   static class Main {