Fix check for absence of single caller inlined methods

Change-Id: Ib304b9599da5d963af90de0ce8ad5c63c80468db
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 0516577..3eab5e6 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -622,7 +622,7 @@
 
             new BridgeHoisting(appViewWithLiveness).run();
 
-            assert Inliner.verifyAllSingleCallerMethodsHaveBeenPruned(appView);
+            assert Inliner.verifyAllSingleCallerMethodsHaveBeenPruned(appViewWithLiveness);
 
             assert appView.allMergedClasses().verifyAllSourcesPruned(appViewWithLiveness);
             assert appView.validateUnboxedEnumsHaveBeenPruned();
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
index 84ec3c5..98c8bd2 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -71,6 +71,16 @@
     definition.parameterAnnotationsList.collectIndexedItems(indexedItems);
   }
 
+  public boolean canBeConvertedToAbstractMethod(AppView<AppInfoWithLiveness> appView) {
+    return (appView.options().canUseAbstractMethodOnNonAbstractClass()
+            || getHolder().isAbstract()
+            || getHolder().isInterface())
+        && !getAccessFlags().isNative()
+        && !getAccessFlags().isPrivate()
+        && !getAccessFlags().isStatic()
+        && !appView.appInfo().isFailedResolutionTarget(getReference());
+  }
+
   public void convertToAbstractOrThrowNullMethod(AppView<AppInfoWithLiveness> appView) {
     if (!convertToAbstractMethodIfPossible(appView)) {
       convertToThrowNullMethod(appView);
@@ -78,14 +88,7 @@
   }
 
   private boolean convertToAbstractMethodIfPossible(AppView<AppInfoWithLiveness> appView) {
-    boolean canBeAbstract =
-        (appView.options().canUseAbstractMethodOnNonAbstractClass()
-                || getHolder().isAbstract()
-                || getHolder().isInterface())
-            && !getAccessFlags().isNative()
-            && !getAccessFlags().isPrivate()
-            && !getAccessFlags().isStatic()
-            && !appView.appInfo().isFailedResolutionTarget(getReference());
+    boolean canBeAbstract = canBeConvertedToAbstractMethod(appView);
     if (canBeAbstract) {
       MethodAccessFlags accessFlags = getAccessFlags();
       accessFlags.demoteFromFinal();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 32df085..ecf8f25 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -1347,12 +1347,15 @@
     singleCallerInlinedMethods.clear();
   }
 
-  public static boolean verifyAllSingleCallerMethodsHaveBeenPruned(AppView<?> appView) {
+  public static boolean verifyAllSingleCallerMethodsHaveBeenPruned(
+      AppView<AppInfoWithLiveness> appView) {
     for (DexProgramClass clazz : appView.appInfo().classesWithDeterministicOrder()) {
-      for (DexEncodedMethod method : clazz.methods()) {
-        assert !method.getOptimizationInfo().hasBeenInlinedIntoSingleCallSite() || !method.hasCode()
-            : "Method was single caller inlined: " + method.toSourceString();
-      }
+      clazz.forEachProgramMethodMatching(
+          method -> method.getOptimizationInfo().hasBeenInlinedIntoSingleCallSite(),
+          method -> {
+            assert !method.getDefinition().hasCode()
+                || !method.canBeConvertedToAbstractMethod(appView);
+          });
     }
     return true;
   }