Fix a minor bug where RRBuildFilesVisitor wasn't using an
inter-visitation-batch Uniquifier for the results.

Because SkyQueryEnvironment#BatchStreamedCallback (the [2nd-]most outer
Callback) internally uses a Uniquifier, this is merely a minor performance bug,
not a correctness bug.

RELNOTES: None
PiperOrigin-RevId: 234704160
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 df706da..a9a0aca 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.query2.engine.Uniquifier;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyKey;
@@ -54,7 +53,7 @@
 public class ParallelSkyQueryUtils {
 
   /** The maximum number of keys to visit at once. */
-  @VisibleForTesting static final int VISIT_BATCH_SIZE = 10000;
+  @VisibleForTesting public static final int VISIT_BATCH_SIZE = 10000;
 
   private ParallelSkyQueryUtils() {
   }
@@ -167,11 +166,11 @@
       Collection<PathFragment> fileIdentifiers,
       QueryExpressionContext<Target> context,
       Callback<Target> callback) throws QueryException, InterruptedException {
-    Uniquifier<SkyKey> keyUniquifier = env.createSkyKeyUniquifier();
     RBuildFilesVisitor visitor =
         new RBuildFilesVisitor(
             env,
-            keyUniquifier,
+            /*visitUniquifier=*/ env.createSkyKeyUniquifier(),
+            /*resultUniquifier=*/ env.createSkyKeyUniquifier(),
             context,
             callback,
             /*rdepFilter=*/ rdep ->
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 e1d9f87..7f89545 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
@@ -39,29 +39,39 @@
   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;
 
   public RBuildFilesVisitor(
       SkyQueryEnvironment env,
-      Uniquifier<SkyKey> uniquifier,
+      Uniquifier<SkyKey> visitUniquifier,
+      Uniquifier<SkyKey> resultUniquifier,
       QueryExpressionContext<Target> context,
       Callback<Target> callback,
       Function<SkyKey, Boolean> rdepFilter) {
-    super(uniquifier, callback, ParallelSkyQueryUtils.VISIT_BATCH_SIZE, PROCESS_RESULTS_BATCH_SIZE);
+    super(
+        visitUniquifier,
+        callback,
+        ParallelSkyQueryUtils.VISIT_BATCH_SIZE,
+        PROCESS_RESULTS_BATCH_SIZE);
     this.env = env;
+    this.resultUniquifier = resultUniquifier;
     this.context = context;
     this.rdepFilter = rdepFilter;
   }
 
   @Override
-  protected Visit getVisitResult(Iterable<SkyKey> values) throws InterruptedException {
+  protected Visit getVisitResult(Iterable<SkyKey> values)
+      throws QueryException, InterruptedException {
     Collection<Iterable<SkyKey>> reverseDeps = env.graph.getReverseDeps(values).values();
     Set<SkyKey> keysToUseForResult = CompactHashSet.create();
     Set<SkyKey> keysToVisitNext = CompactHashSet.create();
     for (SkyKey rdep : Iterables.concat(reverseDeps)) {
       if (rdep.functionName().equals(SkyFunctions.PACKAGE)) {
-        keysToUseForResult.add(rdep);
+        if (resultUniquifier.unique(rdep)) {
+          keysToUseForResult.add(rdep);
+        }
         // Every package has a dep on the external package, so we need to include those edges too.
         if (rdep.equals(EXTERNAL_PACKAGE_KEY)) {
           keysToVisitNext.add(rdep);