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;
+ }
}