Fix bug in member pool collection

Prior to this fix, interfaces that inherited from other interfaces were not linked.

Bug: 128917897
Change-Id: I8d3befe82379ae128d9eb57bd268d427768c2eab
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java b/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java
index 68b32ea..387a12b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.utils.MethodSignatureEquivalence;
 
 // Per-class collection of method signatures.
@@ -48,17 +49,15 @@
         }
       }
       if (clazz.isInterface()) {
-        clazz.type.forAllImplementsSubtypes(
-            implementer -> {
-              DexClass subClazz = application.definitionFor(implementer);
-              if (subClazz != null) {
-                MemberPool<DexMethod> childPool =
-                    memberPools.computeIfAbsent(subClazz, k -> new MemberPool<>(equivalence));
-                childPool.linkInterface(methodPool);
-              }
-            });
+        for (DexType subtype : clazz.type.allImmediateSubtypes()) {
+          DexClass subClazz = application.definitionFor(subtype);
+          if (subClazz != null) {
+            MemberPool<DexMethod> childPool =
+                memberPools.computeIfAbsent(subClazz, k -> new MemberPool<>(equivalence));
+            childPool.linkInterface(methodPool);
+          }
+        }
       }
     };
   }
-
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
index 7454509..a1e2578 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
@@ -4,7 +4,8 @@
 
 package com.android.tools.r8.ir.optimize.uninstantiatedtypes;
 
-import static org.hamcrest.CoreMatchers.containsString;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverMerge;
@@ -13,6 +14,8 @@
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -41,16 +44,18 @@
       testForJvm().addTestClasspath().run(TestClass.class).assertSuccessWithOutput(expectedOutput);
     }
 
-    testForR8(parameters.getBackend())
-        .addInnerClasses(NestedInterfaceMethodTest.class)
-        .addKeepMainRule(TestClass.class)
-        .enableInliningAnnotations()
-        .enableMergeAnnotations()
-        .setMinApi(AndroidApiLevel.B)
-        .run(parameters.getRuntime(), TestClass.class)
-        .assertFailureWithErrorThatMatches(containsString("AbstractMethodError"));
+    CodeInspector inspector =
+        testForR8(parameters.getBackend())
+            .addInnerClasses(NestedInterfaceMethodTest.class)
+            .addKeepMainRule(TestClass.class)
+            .enableInliningAnnotations()
+            .enableMergeAnnotations()
+            .addOptionsModification(options -> options.enableDevirtualization = false)
+            .setMinApi(AndroidApiLevel.B)
+            .run(parameters.getRuntime(), TestClass.class)
+            .assertSuccessWithOutput(expectedOutput)
+            .inspector();
 
-    /*
     ClassSubject interfaceSubject = inspector.clazz(I.class);
     assertThat(interfaceSubject, isPresent());
     assertThat(interfaceSubject.method(Uninstantiated.class.getTypeName(), "m"), isPresent());
@@ -58,7 +63,6 @@
     ClassSubject classSubject = inspector.clazz(A.class);
     assertThat(classSubject, isPresent());
     assertThat(classSubject.method(Uninstantiated.class.getTypeName(), "m"), isPresent());
-    */
   }
 
   static class TestClass {