Extend RootSet pruning to conditional keep info

Change-Id: I6d864c12656fb619102e5905850f01b574feae42
diff --git a/src/main/java/com/android/tools/r8/shaking/DependentMinimumKeepInfoCollection.java b/src/main/java/com/android/tools/r8/shaking/DependentMinimumKeepInfoCollection.java
index 9e9cdc3..7d812b2 100644
--- a/src/main/java/com/android/tools/r8/shaking/DependentMinimumKeepInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/shaking/DependentMinimumKeepInfoCollection.java
@@ -27,6 +27,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 public abstract class DependentMinimumKeepInfoCollection {
 
@@ -159,6 +160,10 @@
     return internalRemove(preconditionEvent, minimumKeepInfo -> minimumKeepInfo.remove(method));
   }
 
+  public void removeIf(Predicate<? super MinimumKeepInfoCollection> predicate) {
+    dependentMinimumKeepInfo.values().removeIf(predicate);
+  }
+
   private <J extends Joiner<?, ?, ?>> J internalRemove(
       EnqueuerEvent preconditionEvent, Function<MinimumKeepInfoCollection, J> fn) {
     MinimumKeepInfoCollection minimumKeepInfo = get(preconditionEvent);
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
index b22bea5..626dc9a 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
@@ -1985,14 +1985,12 @@
 
     public void pruneItems(PrunedItems prunedItems, Timing timing) {
       timing.begin("Prune RootSet");
-      MinimumKeepInfoCollection unconditionalMinimumKeepInfo =
-          getDependentMinimumKeepInfo().getUnconditionalMinimumKeepInfoOrDefault(null);
-      if (unconditionalMinimumKeepInfo != null) {
-        unconditionalMinimumKeepInfo.pruneItems(prunedItems);
-        if (unconditionalMinimumKeepInfo.isEmpty()) {
-          getDependentMinimumKeepInfo().remove(UnconditionalKeepInfoEvent.get());
-        }
-      }
+      getDependentMinimumKeepInfo()
+          .removeIf(
+              minimumKeepInfo -> {
+                minimumKeepInfo.pruneItems(prunedItems);
+                return minimumKeepInfo.isEmpty();
+              });
       timing.end();
     }