use of com.google.idea.blaze.base.async.FutureUtil.FutureResult in project intellij by bazelbuild.
the class PackageLister method expandPackageTargets.
/**
* Expands all-in-package-recursive wildcard targets into all-in-single-package targets by
* traversing the file system, looking for child blaze packages.
*
* <p>Returns null if directory traversal failed or was cancelled.
*/
@Nullable
static Map<TargetExpression, List<TargetExpression>> expandPackageTargets(BuildSystemProvider provider, BlazeContext context, WorkspacePathResolver pathResolver, Collection<WildcardTargetPattern> wildcardPatterns) {
List<ListenableFuture<Entry<TargetExpression, List<TargetExpression>>>> futures = Lists.newArrayList();
for (WildcardTargetPattern pattern : wildcardPatterns) {
if (!pattern.isRecursive() || pattern.toString().startsWith("-")) {
continue;
}
File dir = pathResolver.resolveToFile(pattern.getBasePackage());
if (!FileOperationProvider.getInstance().isDirectory(dir)) {
continue;
}
futures.add(FetchExecutor.EXECUTOR.submit(() -> {
List<TargetExpression> expandedTargets = new ArrayList<>();
traversePackageRecursively(provider, pathResolver, dir, expandedTargets);
return Maps.immutableEntry(pattern.originalPattern, expandedTargets);
}));
}
if (futures.isEmpty()) {
return ImmutableMap.of();
}
FutureResult<List<Entry<TargetExpression, List<TargetExpression>>>> result = FutureUtil.waitForFuture(context, Futures.allAsList(futures)).withProgressMessage("Expanding wildcard target patterns...").timed("ExpandWildcardTargets", EventType.Other).onError("Expanding wildcard target patterns failed").run();
if (!result.success()) {
return null;
}
return result.result().stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue, (x, y) -> x));
}
Aggregations