diff --git a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
index a9a0aca..1f5e55a 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
@@ -31,7 +31,6 @@
 import com.google.devtools.build.lib.query2.engine.QueryExpressionContext;
 import com.google.devtools.build.lib.query2.engine.QueryUtil;
 import com.google.devtools.build.lib.query2.engine.QueryUtil.AggregateAllCallback;
-import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyKey;
 import java.util.Collection;
@@ -172,14 +171,7 @@
             /*visitUniquifier=*/ env.createSkyKeyUniquifier(),
             /*resultUniquifier=*/ env.createSkyKeyUniquifier(),
             context,
-            callback,
-            /*rdepFilter=*/ rdep ->
-                // Packages may depend on the existence of subpackages, but these edges aren't
-                // relevant to rbuildfiles. They may also depend on files transitively through
-                // globs, but these cannot be included in load statements and so we don't traverse
-                // through these either.
-                !rdep.functionName().equals(SkyFunctions.PACKAGE_LOOKUP)
-                    && !rdep.functionName().equals(SkyFunctions.GLOB));
+            callback);
     visitor.visitAndWaitForCompletion(env.getFileStateKeysForFileFragments(fileIdentifiers));
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesVisitor.java
index 7f89545..ec4bb59 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesVisitor.java
@@ -26,7 +26,6 @@
 import com.google.devtools.build.skyframe.SkyKey;
 import java.util.Collection;
 import java.util.Set;
-import java.util.function.Function;
 
 /** A helper class that computes 'rbuildfiles(<blah>)' via BFS. */
 public class RBuildFilesVisitor extends AbstractSkyKeyParallelVisitor<Target> {
@@ -39,17 +38,15 @@
   private static final SkyKey EXTERNAL_PACKAGE_KEY =
       PackageValue.key(LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER);
   private final SkyQueryEnvironment env;
-  private final Uniquifier<SkyKey> resultUniquifier;
   private final QueryExpressionContext<Target> context;
-  private final Function<SkyKey, Boolean> rdepFilter;
+  protected final Uniquifier<SkyKey> resultUniquifier;
 
   public RBuildFilesVisitor(
       SkyQueryEnvironment env,
       Uniquifier<SkyKey> visitUniquifier,
       Uniquifier<SkyKey> resultUniquifier,
       QueryExpressionContext<Target> context,
-      Callback<Target> callback,
-      Function<SkyKey, Boolean> rdepFilter) {
+      Callback<Target> callback) {
     super(
         visitUniquifier,
         callback,
@@ -58,7 +55,6 @@
     this.env = env;
     this.resultUniquifier = resultUniquifier;
     this.context = context;
-    this.rdepFilter = rdepFilter;
   }
 
   @Override
@@ -76,8 +72,8 @@
         if (rdep.equals(EXTERNAL_PACKAGE_KEY)) {
           keysToVisitNext.add(rdep);
         }
-      } else if (rdepFilter.apply(rdep)) {
-        keysToVisitNext.add(rdep);
+      } else {
+        processNonPackageRdepAndDetermineVisitations(rdep, keysToVisitNext, keysToUseForResult);
       }
     }
     return new Visit(keysToUseForResult, keysToVisitNext);
@@ -95,4 +91,17 @@
   protected Iterable<SkyKey> preprocessInitialVisit(Iterable<SkyKey> keys) {
     return keys;
   }
+
+  protected void processNonPackageRdepAndDetermineVisitations(
+      SkyKey rdep, Set<SkyKey> keysToVisitNext, Set<SkyKey> keysToUseForResult)
+      throws QueryException {
+    // Packages may depend on the existence of subpackages, but these edges aren't
+    // relevant to rbuildfiles. They may also depend on files transitively through
+    // globs, but these cannot be included in load statements and so we don't traverse
+    // through these either.
+    if (!rdep.functionName().equals(SkyFunctions.PACKAGE_LOOKUP)
+        && !rdep.functionName().equals(SkyFunctions.GLOB)) {
+      keysToVisitNext.add(rdep);
+    }
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
index 0741eb0..f5c5f8c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
@@ -133,9 +133,10 @@
     return Key.create(pkgIdentifier);
   }
 
+  /** {@link SkyKey} for {@link PackageLookupValue} computation. */
   @AutoCodec.VisibleForSerialization
   @AutoCodec
-  static class Key extends AbstractSkyKey<PackageIdentifier> {
+  public static class Key extends AbstractSkyKey<PackageIdentifier> {
     private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
 
     private Key(PackageIdentifier arg) {
