Refactor RootSetUtils to rootset package

Change-Id: Ia2e06214d84be7ad073298fb41ffcd735130437c
diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexList.java b/src/main/java/com/android/tools/r8/GenerateMainDexList.java
index 0b93eb9..e5c0b2a 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexList.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexList.java
@@ -21,8 +21,8 @@
 import com.android.tools.r8.shaking.EnqueuerFactory;
 import com.android.tools.r8.shaking.MainDexInfo;
 import com.android.tools.r8.shaking.MainDexListBuilder;
-import com.android.tools.r8.shaking.RootSetUtils.MainDexRootSet;
 import com.android.tools.r8.shaking.WhyAreYouKeepingConsumer;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.MainDexRootSet;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.ExceptionUtils;
 import com.android.tools.r8.utils.InternalOptions;
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 14a410c..3e8e3f5 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -97,14 +97,14 @@
 import com.android.tools.r8.shaking.MainDexListBuilder;
 import com.android.tools.r8.shaking.ProguardConfigurationRule;
 import com.android.tools.r8.shaking.ProguardConfigurationUtils;
-import com.android.tools.r8.shaking.RootSetUtils.MainDexRootSet;
-import com.android.tools.r8.shaking.RootSetUtils.RootSet;
-import com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.shaking.RuntimeTypeCheckInfo;
 import com.android.tools.r8.shaking.TreePruner;
 import com.android.tools.r8.shaking.TreePrunerConfiguration;
 import com.android.tools.r8.shaking.WhyAreYouKeepingConsumer;
 import com.android.tools.r8.shaking.assume.AssumeInfoCollection;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.MainDexRootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.startup.NonStartupInStartupOutliner;
 import com.android.tools.r8.synthesis.SyntheticFinalization;
 import com.android.tools.r8.synthesis.SyntheticItems;
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index a17ab5c..e2052b6 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -58,9 +58,9 @@
 import com.android.tools.r8.shaking.LibraryModeledPredicate;
 import com.android.tools.r8.shaking.MainDexInfo;
 import com.android.tools.r8.shaking.ProguardCompatibilityActions;
-import com.android.tools.r8.shaking.RootSetUtils.MainDexRootSet;
-import com.android.tools.r8.shaking.RootSetUtils.RootSet;
 import com.android.tools.r8.shaking.assume.AssumeInfoCollection;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.MainDexRootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSet;
 import com.android.tools.r8.synthesis.SyntheticItems;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.InternalOptions;
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java b/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java
index b874d38..8e6e873 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java
@@ -20,7 +20,7 @@
     return null;
   }
 
-  static class AnnotationsIgnoredMatchResult extends AnnotationMatchResult {
+  public static class AnnotationsIgnoredMatchResult extends AnnotationMatchResult {
 
     private static final AnnotationsIgnoredMatchResult INSTANCE =
         new AnnotationsIgnoredMatchResult();
@@ -32,7 +32,7 @@
     }
   }
 
-  static class ConcreteAnnotationMatchResult extends AnnotationMatchResult {
+  public static class ConcreteAnnotationMatchResult extends AnnotationMatchResult {
 
     private final List<MatchedAnnotation> matchedAnnotations;
 
@@ -55,13 +55,13 @@
     }
   }
 
-  static class MatchedAnnotation {
+  public static class MatchedAnnotation {
 
     private final Definition annotatedItem;
     private final DexAnnotation annotation;
     private final AnnotatedKind annotatedKind;
 
-    MatchedAnnotation(
+    public MatchedAnnotation(
         Definition annotatedItem, DexAnnotation annotation, AnnotatedKind annotatedKind) {
       this.annotatedItem = annotatedItem;
       this.annotation = annotation;
diff --git a/src/main/java/com/android/tools/r8/shaking/ClassInlineRule.java b/src/main/java/com/android/tools/r8/shaking/ClassInlineRule.java
index 6639246..4404b1b 100644
--- a/src/main/java/com/android/tools/r8/shaking/ClassInlineRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/ClassInlineRule.java
@@ -107,7 +107,7 @@
   }
 
   @Override
-  String typeString() {
+  public String typeString() {
     switch (type) {
       case ALWAYS:
         return "alwaysclassinline";
diff --git a/src/main/java/com/android/tools/r8/shaking/DexStringCache.java b/src/main/java/com/android/tools/r8/shaking/DexStringCache.java
index 377dacd..23fdc8c 100644
--- a/src/main/java/com/android/tools/r8/shaking/DexStringCache.java
+++ b/src/main/java/com/android/tools/r8/shaking/DexStringCache.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexString;
 import java.util.concurrent.ConcurrentHashMap;
 
-final class DexStringCache {
+public final class DexStringCache {
   private final ConcurrentHashMap<DexString, String> stringCache = new ConcurrentHashMap<>();
 
   public String lookupString(DexString name) {
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 4f4fd21..30d9d79 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -135,12 +135,12 @@
 import com.android.tools.r8.shaking.KeepInfoCollection.MutableKeepInfoCollection;
 import com.android.tools.r8.shaking.KeepMethodInfo.Joiner;
 import com.android.tools.r8.shaking.KeepReason.ReflectiveUseFromXml;
-import com.android.tools.r8.shaking.RootSetUtils.ConsequentRootSet;
-import com.android.tools.r8.shaking.RootSetUtils.RootSet;
-import com.android.tools.r8.shaking.RootSetUtils.RootSetBase;
-import com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.shaking.ScopedDexMethodSet.AddMethodIfMoreVisibleResult;
 import com.android.tools.r8.shaking.reflectiveidentification.EnqueuerReflectiveIdentification;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.ConsequentRootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBase;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.shaking.rules.ApplicableRulesEvaluator;
 import com.android.tools.r8.shaking.rules.KeepAnnotationFakeProguardRule;
 import com.android.tools.r8.shaking.rules.KeepAnnotationMatcher;
@@ -5105,7 +5105,7 @@
         action.getIfRulePreconditionMatch());
   }
 
-  void retainAnnotationForFinalTreeShaking(List<MatchedAnnotation> matchedAnnotations) {
+  public void retainAnnotationForFinalTreeShaking(List<MatchedAnnotation> matchedAnnotations) {
     assert mode.isInitialTreeShaking();
     if (annotationRemoverBuilder != null) {
       for (MatchedAnnotation matchedAnnotation : matchedAnnotations) {
diff --git a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
index 7f2238d..15dfff8 100644
--- a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
+++ b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
@@ -14,9 +14,9 @@
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.shaking.RootSetUtils.ConsequentRootSetBuilder;
-import com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.shaking.ifrules.MaterializedSubsequentRulesOptimizer;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.ConsequentRootSetBuilder;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.threading.TaskCollection;
 import com.android.tools.r8.utils.MapUtils;
 import com.android.tools.r8.utils.Pair;
diff --git a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluatorFactory.java b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluatorFactory.java
index ca23312..2b157c0 100644
--- a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluatorFactory.java
+++ b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluatorFactory.java
@@ -25,8 +25,8 @@
 import com.android.tools.r8.graph.analysis.NewlyLiveMethodEnqueuerAnalysis;
 import com.android.tools.r8.graph.analysis.NewlyReferencedFieldEnqueuerAnalysis;
 import com.android.tools.r8.graph.analysis.NewlyTargetedMethodEnqueuerAnalysis;
-import com.android.tools.r8.shaking.RootSetUtils.ConsequentRootSet;
-import com.android.tools.r8.shaking.RootSetUtils.ConsequentRootSetBuilder;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.ConsequentRootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.ConsequentRootSetBuilder;
 import com.android.tools.r8.threading.TaskCollection;
 import com.android.tools.r8.utils.timing.Timing;
 import com.google.common.base.Equivalence.Wrapper;
diff --git a/src/main/java/com/android/tools/r8/shaking/InterfaceMethodSyntheticBridgeAction.java b/src/main/java/com/android/tools/r8/shaking/InterfaceMethodSyntheticBridgeAction.java
index 5aa2580..d69f991 100644
--- a/src/main/java/com/android/tools/r8/shaking/InterfaceMethodSyntheticBridgeAction.java
+++ b/src/main/java/com/android/tools/r8/shaking/InterfaceMethodSyntheticBridgeAction.java
@@ -15,7 +15,7 @@
   private final ProguardIfRulePreconditionMatch ifRulePreconditionMatch;
   private final DexClass precondition;
 
-  InterfaceMethodSyntheticBridgeAction(
+  public InterfaceMethodSyntheticBridgeAction(
       ProgramMethod methodToKeep,
       ProgramMethod singleTarget,
       ProguardConfigurationRule context,
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java
index 84518dd..c676bba 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java
@@ -4,10 +4,10 @@
 package com.android.tools.r8.shaking;
 
 import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
-import static com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder.satisfyAccessFlag;
-import static com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder.satisfyAnnotation;
-import static com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder.satisfyClassType;
-import static com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder.satisfyNonSyntheticClass;
+import static com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder.satisfyAccessFlag;
+import static com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder.satisfyAnnotation;
+import static com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder.satisfyClassType;
+import static com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder.satisfyNonSyntheticClass;
 import static com.google.common.base.Predicates.alwaysTrue;
 
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
@@ -19,7 +19,7 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.shaking.ProguardWildcard.BackReference;
-import com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.utils.IterableUtils;
 import com.android.tools.r8.utils.OptionalBool;
 import com.android.tools.r8.utils.StringUtils;
@@ -158,7 +158,7 @@
     this.canReferenceDeadTypes = true;
   }
 
-  void forEachRelevantCandidate(
+  public void forEachRelevantCandidate(
       AppView<? extends AppInfoWithClassHierarchy> appView,
       ImmediateAppSubtypingInfo subtypingInfo,
       Iterable<DexProgramClass> defaultValue,
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardIfRulePreconditionMatch.java b/src/main/java/com/android/tools/r8/shaking/ProguardIfRulePreconditionMatch.java
index 000cfc3..36a8d56 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardIfRulePreconditionMatch.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardIfRulePreconditionMatch.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.Definition;
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexClassAndMethod;
-import com.android.tools.r8.shaking.RootSetUtils.ConsequentRootSetBuilder;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.ConsequentRootSetBuilder;
 import com.android.tools.r8.utils.collections.DexClassAndMethodSet;
 
 public class ProguardIfRulePreconditionMatch {
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardKeepRuleModifiers.java b/src/main/java/com/android/tools/r8/shaking/ProguardKeepRuleModifiers.java
index 75ad742..bf6e49d 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardKeepRuleModifiers.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardKeepRuleModifiers.java
@@ -79,7 +79,7 @@
       this.includeDescriptorClasses = includeDescriptorClasses;
     }
 
-    ProguardKeepRuleModifiers build() {
+    public ProguardKeepRuleModifiers build() {
       return new ProguardKeepRuleModifiers(
           allowsAccessModification,
           allowsAnnotationRemoval,
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
index 8974c5c..702942e 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
@@ -15,7 +15,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.shaking.ProguardConfigurationParser.IdentifierPatternWithWildcards;
-import com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSetBuilder;
 import com.android.tools.r8.utils.IterableUtils;
 import com.android.tools.r8.utils.ObjectUtils;
 import com.android.tools.r8.utils.StringUtils;
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java b/src/main/java/com/android/tools/r8/shaking/rootset/RootSetUtils.java
similarity index 95%
rename from src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
rename to src/main/java/com/android/tools/r8/shaking/rootset/RootSetUtils.java
index ad0b83a..8087cf8 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/rootset/RootSetUtils.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2016, 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.shaking;
+package com.android.tools.r8.shaking.rootset;
 
 import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
 import static com.android.tools.r8.utils.LensUtils.rewriteAndApplyIfNotPrimitiveType;
@@ -63,14 +63,62 @@
 import com.android.tools.r8.position.MethodPosition;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.repackaging.RepackagingUtils;
+import com.android.tools.r8.shaking.AnnotationMatchResult;
 import com.android.tools.r8.shaking.AnnotationMatchResult.AnnotationsIgnoredMatchResult;
 import com.android.tools.r8.shaking.AnnotationMatchResult.ConcreteAnnotationMatchResult;
 import com.android.tools.r8.shaking.AnnotationMatchResult.MatchedAnnotation;
+import com.android.tools.r8.shaking.AppInfoWithLiveness;
+import com.android.tools.r8.shaking.CheckEnumUnboxedRule;
+import com.android.tools.r8.shaking.ClassInlineRule;
+import com.android.tools.r8.shaking.ConvertCheckNotNullRule;
+import com.android.tools.r8.shaking.DependentMinimumKeepInfoCollection;
+import com.android.tools.r8.shaking.DexStringCache;
+import com.android.tools.r8.shaking.Enqueuer;
+import com.android.tools.r8.shaking.EnqueuerEvent;
 import com.android.tools.r8.shaking.EnqueuerEvent.InstantiatedClassEnqueuerEvent;
 import com.android.tools.r8.shaking.EnqueuerEvent.LiveClassEnqueuerEvent;
 import com.android.tools.r8.shaking.EnqueuerEvent.UnconditionalKeepInfoEvent;
+import com.android.tools.r8.shaking.InlineRule;
+import com.android.tools.r8.shaking.InterfaceMethodSyntheticBridgeAction;
 import com.android.tools.r8.shaking.KeepAnnotationCollectionInfo.RetentionInfo;
+import com.android.tools.r8.shaking.KeepConstantArgumentRule;
 import com.android.tools.r8.shaking.KeepInfo.Joiner;
+import com.android.tools.r8.shaking.KeepUnusedArgumentRule;
+import com.android.tools.r8.shaking.KeepUnusedReturnValueRule;
+import com.android.tools.r8.shaking.MaximumRemovedAndroidLogLevelRule;
+import com.android.tools.r8.shaking.MinimumKeepInfoCollection;
+import com.android.tools.r8.shaking.NoAccessModificationRule;
+import com.android.tools.r8.shaking.NoFieldTypeStrengtheningRule;
+import com.android.tools.r8.shaking.NoHorizontalClassMergingRule;
+import com.android.tools.r8.shaking.NoMethodStaticizingRule;
+import com.android.tools.r8.shaking.NoParameterReorderingRule;
+import com.android.tools.r8.shaking.NoParameterTypeStrengtheningRule;
+import com.android.tools.r8.shaking.NoRedundantFieldLoadEliminationRule;
+import com.android.tools.r8.shaking.NoReturnTypeStrengtheningRule;
+import com.android.tools.r8.shaking.NoUnusedInterfaceRemovalRule;
+import com.android.tools.r8.shaking.NoValuePropagationRule;
+import com.android.tools.r8.shaking.NoVerticalClassMergingRule;
+import com.android.tools.r8.shaking.ProguardAssumeMayHaveSideEffectsRule;
+import com.android.tools.r8.shaking.ProguardAssumeNoSideEffectRule;
+import com.android.tools.r8.shaking.ProguardAssumeValuesRule;
+import com.android.tools.r8.shaking.ProguardCheckDiscardRule;
+import com.android.tools.r8.shaking.ProguardClassFilter;
+import com.android.tools.r8.shaking.ProguardConfigurationRule;
+import com.android.tools.r8.shaking.ProguardIdentifierNameStringRule;
+import com.android.tools.r8.shaking.ProguardIfRule;
+import com.android.tools.r8.shaking.ProguardIfRulePreconditionMatch;
+import com.android.tools.r8.shaking.ProguardKeepAttributes;
+import com.android.tools.r8.shaking.ProguardKeepRule;
+import com.android.tools.r8.shaking.ProguardKeepRuleBase;
+import com.android.tools.r8.shaking.ProguardKeepRuleModifiers;
+import com.android.tools.r8.shaking.ProguardMemberRule;
+import com.android.tools.r8.shaking.ProguardMemberRuleValue;
+import com.android.tools.r8.shaking.ProguardTypeMatcher;
+import com.android.tools.r8.shaking.ReprocessClassInitializerRule;
+import com.android.tools.r8.shaking.ReprocessMethodRule;
+import com.android.tools.r8.shaking.WhyAreYouKeepingRule;
+import com.android.tools.r8.shaking.WhyAreYouNotInliningRule;
+import com.android.tools.r8.shaking.WhyAreYouNotObfuscatingRule;
 import com.android.tools.r8.shaking.assume.AssumeInfoCollection;
 import com.android.tools.r8.shaking.assume.AssumeMethodInfoCollection;
 import com.android.tools.r8.shaking.rules.ReferencedFromExcludedClassInR8PartialRule;
@@ -196,10 +244,7 @@
     private RootSetBuilder(
         AppView<? extends AppInfoWithClassHierarchy> appView,
         ImmediateAppSubtypingInfo subtypingInfo) {
-      this(
-          appView,
-          subtypingInfo,
-          null);
+      this(appView, subtypingInfo, null);
     }
 
     public DependentMinimumKeepInfoCollection getDependentMinimumKeepInfo() {
@@ -497,7 +542,7 @@
       }
     }
 
-    void runPerRule(
+    public void runPerRule(
         TaskCollection<?> tasks,
         ProguardConfigurationRule rule,
         ProguardIfRulePreconditionMatch ifRulePreconditionMatch,
@@ -742,7 +787,7 @@
       }
     }
 
-    ConsequentRootSet buildConsequentRootSet() {
+    public ConsequentRootSet buildConsequentRootSet() {
       return new ConsequentRootSet(
           dependentMinimumKeepInfo,
           dependentKeepClassCompatRule,
@@ -1183,21 +1228,22 @@
       out.close();
     }
 
-    static boolean satisfyNonSyntheticClass(DexClass clazz, AppView<?> appView) {
+    public static boolean satisfyNonSyntheticClass(DexClass clazz, AppView<?> appView) {
       return !clazz.isProgramClass()
           || !appView.getSyntheticItems().isSynthetic(clazz.asProgramClass());
     }
 
-    static boolean satisfyClassType(ProguardConfigurationRule rule, DexClass clazz) {
+    public static boolean satisfyClassType(ProguardConfigurationRule rule, DexClass clazz) {
       return rule.getClassType().matches(clazz) != rule.getClassTypeNegated();
     }
 
-    static boolean satisfyAccessFlag(ProguardConfigurationRule rule, DexClass clazz) {
+    public static boolean satisfyAccessFlag(ProguardConfigurationRule rule, DexClass clazz) {
       return rule.getClassAccessFlags().containsAll(clazz.accessFlags)
           && rule.getNegatedClassAccessFlags().containsNone(clazz.accessFlags);
     }
 
-    static AnnotationMatchResult satisfyAnnotation(ProguardConfigurationRule rule, DexClass clazz) {
+    public static AnnotationMatchResult satisfyAnnotation(
+        ProguardConfigurationRule rule, DexClass clazz) {
       return containsAllAnnotations(rule.getClassAnnotations(), clazz);
     }
 
@@ -1224,7 +1270,7 @@
       return getMethodSatisfyingRule(rule, methods) != null;
     }
 
-    DexClassAndMethod getMethodSatisfyingRule(
+    public DexClassAndMethod getMethodSatisfyingRule(
         ProguardMemberRule rule, Iterable<DexClassAndMethod> methods) {
       if (rule.getRuleType().includesMethods()) {
         for (DexClassAndMethod method : methods) {
@@ -1236,7 +1282,8 @@
       return null;
     }
 
-    boolean ruleSatisfiedByFields(ProguardMemberRule rule, Iterable<DexClassAndField> fields) {
+    public boolean ruleSatisfiedByFields(
+        ProguardMemberRule rule, Iterable<DexClassAndField> fields) {
       if (rule.getRuleType().includesFields()) {
         for (DexClassAndField field : fields) {
           if (rule.matches(field, appView, this::handleMatchedAnnotation, dexStringCache)) {
@@ -1247,17 +1294,18 @@
       return false;
     }
 
-    boolean sideEffectFreeIsRuleSatisfiedByField(ProguardMemberRule rule, DexClassAndField field) {
+    public boolean sideEffectFreeIsRuleSatisfiedByField(
+        ProguardMemberRule rule, DexClassAndField field) {
       return rule.matches(field, appView, ignore -> {}, dexStringCache);
     }
 
-    static AnnotationMatchResult containsAllAnnotations(
+    public static AnnotationMatchResult containsAllAnnotations(
         List<ProguardTypeMatcher> annotationMatchers, DexClass clazz) {
       return containsAllAnnotations(
           annotationMatchers, clazz, clazz.annotations(), AnnotatedKind.TYPE);
     }
 
-    static <D extends DexEncodedMember<D, R>, R extends DexMember<D, R>>
+    public static <D extends DexEncodedMember<D, R>, R extends DexMember<D, R>>
         boolean containsAllAnnotations(
             List<ProguardTypeMatcher> annotationMatchers,
             DexClassAndMember<D, R> member,
@@ -1426,7 +1474,7 @@
       }
     }
 
-    synchronized void addItemToSets(
+    public synchronized void addItemToSets(
         Definition item,
         ProguardConfigurationRule context,
         ProguardMemberRule rule,
@@ -2192,11 +2240,12 @@
     }
   }
 
-  abstract static class RootSetBase {
+  public abstract static class RootSetBase {
 
     private final DependentMinimumKeepInfoCollection dependentMinimumKeepInfo;
-    final Map<DexType, Set<ProguardKeepRuleBase>> dependentKeepClassCompatRule;
-    final List<InterfaceMethodSyntheticBridgeAction> delayedInterfaceMethodSyntheticBridgeActions;
+    public final Map<DexType, Set<ProguardKeepRuleBase>> dependentKeepClassCompatRule;
+    public final List<InterfaceMethodSyntheticBridgeAction>
+        delayedInterfaceMethodSyntheticBridgeActions;
     public final ProgramMethodMap<ProgramMethod> pendingMethodMoveInverse;
 
     RootSetBase(
@@ -2211,7 +2260,7 @@
       this.pendingMethodMoveInverse = pendingMethodMoveInverse;
     }
 
-    Set<ProguardKeepRuleBase> getDependentKeepClassCompatRule(DexType type) {
+    public Set<ProguardKeepRuleBase> getDependentKeepClassCompatRule(DexType type) {
       return dependentKeepClassCompatRule.get(type);
     }
 
@@ -2291,7 +2340,7 @@
       }
     }
 
-    void addConsequentRootSet(ConsequentRootSet consequentRootSet) {
+    public void addConsequentRootSet(ConsequentRootSet consequentRootSet) {
       consequentRootSet.dependentKeepClassCompatRule.forEach(
           (type, rules) ->
               dependentKeepClassCompatRule
@@ -2381,7 +2430,7 @@
       return rewrittenRootSet;
     }
 
-    void shouldNotBeMinified(ProgramDefinition definition) {
+    public void shouldNotBeMinified(ProgramDefinition definition) {
       getDependentMinimumKeepInfo()
           .getOrCreateUnconditionalMinimumKeepInfoFor(definition.getReference())
           .disallowMinification()
@@ -2554,14 +2603,11 @@
         AppView<? extends AppInfoWithClassHierarchy> appView,
         ImmediateAppSubtypingInfo subtypingInfo,
         Iterable<? extends ProguardConfigurationRule> rules) {
-      return new RootSetBuilder(
-          appView,
-          subtypingInfo,
-          rules);
+      return new RootSetBuilder(appView, subtypingInfo, rules);
     }
   }
 
-  static class ConsequentRootSetBuilder extends RootSetBuilder {
+  public static class ConsequentRootSetBuilder extends RootSetBuilder {
 
     private final Enqueuer enqueuer;
 
@@ -2577,7 +2623,7 @@
     }
 
     @Override
-    void handleMatchedAnnotation(AnnotationMatchResult annotationMatchResult) {
+    public void handleMatchedAnnotation(AnnotationMatchResult annotationMatchResult) {
       if (enqueuer.getMode().isInitialTreeShaking()
           && annotationMatchResult.isConcreteAnnotationMatchResult()) {
         enqueuer.retainAnnotationForFinalTreeShaking(
@@ -2607,7 +2653,7 @@
           pendingMethodMoveInverse);
     }
 
-    static ConsequentRootSetBuilder builder(
+    public static ConsequentRootSetBuilder builder(
         AppView<? extends AppInfoWithClassHierarchy> appView, Enqueuer enqueuer) {
       return new ConsequentRootSetBuilder(appView, enqueuer, enqueuer.getSubtypingInfo());
     }
@@ -2674,7 +2720,7 @@
     }
 
     @Override
-    void shouldNotBeMinified(ProgramDefinition definition) {
+    public void shouldNotBeMinified(ProgramDefinition definition) {
       // Do nothing.
     }
 
diff --git a/src/test/java/com/android/tools/r8/ir/InlineTest.java b/src/test/java/com/android/tools/r8/ir/InlineTest.java
index d48c4dc..38b3ff6 100644
--- a/src/test/java/com/android/tools/r8/ir/InlineTest.java
+++ b/src/test/java/com/android/tools/r8/ir/InlineTest.java
@@ -30,7 +30,7 @@
 import com.android.tools.r8.shaking.EnqueuerResult;
 import com.android.tools.r8.shaking.ProguardConfiguration;
 import com.android.tools.r8.shaking.ProguardKeepRule;
-import com.android.tools.r8.shaking.RootSetUtils.RootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSet;
 import com.android.tools.r8.smali.SmaliBuilder;
 import com.android.tools.r8.smali.SmaliBuilder.MethodSignature;
 import com.android.tools.r8.utils.AndroidApp;
diff --git a/src/test/testbase/java/com/android/tools/r8/TestBase.java b/src/test/testbase/java/com/android/tools/r8/TestBase.java
index 886e0ab..48cfc23 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestBase.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestBase.java
@@ -74,7 +74,7 @@
 import com.android.tools.r8.shaking.ProguardMemberRule;
 import com.android.tools.r8.shaking.ProguardMemberType;
 import com.android.tools.r8.shaking.ProguardTypeMatcher;
-import com.android.tools.r8.shaking.RootSetUtils.RootSet;
+import com.android.tools.r8.shaking.rootset.RootSetUtils.RootSet;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.transformers.ClassFileTransformer;
 import com.android.tools.r8.utils.AndroidApiLevel;