Implement the rdeps predicate directly for RBuildFilesVisitor.

PiperOrigin-RevId: 234722492
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) {