Inside findTargetsBeneathDirectory(), invoke the callback with all targets from the current package batch.

--
MOS_MIGRATED_REVID=111858978
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
index 2641056..21c9482 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
@@ -13,6 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.skyframe;
 
+import static com.google.devtools.build.lib.pkgcache.FilteringPolicies.NO_FILTER;
+
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -190,10 +192,11 @@
     // into batches.
     for (Iterable<PackageIdentifier> pkgIdBatch :
         Iterables.partition(pkgIds, MAX_PACKAGES_BULK_GET)) {
-      for (ResolvedTargets<Target> targets :
-          bulkGetTargetsInPackage(originalPattern, pkgIdBatch, FilteringPolicies.NO_FILTER)
-              .values()) {
-        List<Target> filteredTargets = new ArrayList<>(targets.getTargets().size());
+
+      Iterable<ResolvedTargets<Target>> resolvedTargets =
+          bulkGetTargetsInPackage(originalPattern, pkgIdBatch, NO_FILTER).values();
+      List<Target> filteredTargets = new ArrayList<>(calculateSize(resolvedTargets));
+      for (ResolvedTargets<Target> targets : resolvedTargets) {
         for (Target target : targets.getTargets()) {
           // Perform the no-targets-found check before applying the filtering policy so we only
           // return the error if the input directory's subtree really contains no targets.
@@ -202,13 +205,21 @@
             filteredTargets.add(target);
           }
         }
-        callback.process(filteredTargets);
       }
+      callback.process(filteredTargets);
     }
 
     if (!foundTarget) {
       throw new TargetParsingException("no targets found beneath '" + pathFragment + "'");
     }
   }
+
+  private static <T> int calculateSize(Iterable<ResolvedTargets<T>> resolvedTargets) {
+    int size = 0;
+    for (ResolvedTargets<T> targets : resolvedTargets) {
+      size += targets.getTargets().size();
+    }
+    return size;
+  }
 }