Search in sources :

Example 1 with FutureResult

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));
}
Also used : BlazeContext(com.google.idea.blaze.base.scope.BlazeContext) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Lists(com.google.common.collect.Lists) Map(java.util.Map) TargetExpression(com.google.idea.blaze.base.model.primitives.TargetExpression) WorkspacePathResolver(com.google.idea.blaze.base.sync.workspace.WorkspacePathResolver) Nullable(javax.annotation.Nullable) ImmutableMap(com.google.common.collect.ImmutableMap) Predicate(java.util.function.Predicate) WorkspacePathUtil(com.google.idea.blaze.base.util.WorkspacePathUtil) Collection(java.util.Collection) BuildSystemProvider(com.google.idea.blaze.base.bazel.BuildSystemProvider) FutureUtil(com.google.idea.blaze.base.async.FutureUtil) FutureResult(com.google.idea.blaze.base.async.FutureUtil.FutureResult) Set(java.util.Set) Maps(com.google.common.collect.Maps) Collectors(java.util.stream.Collectors) FileOperationProvider(com.google.idea.blaze.base.io.FileOperationProvider) File(java.io.File) Futures(com.google.common.util.concurrent.Futures) List(java.util.List) WildcardTargetPattern(com.google.idea.blaze.base.model.primitives.WildcardTargetPattern) Entry(java.util.Map.Entry) WorkspacePath(com.google.idea.blaze.base.model.primitives.WorkspacePath) FetchExecutor(com.google.idea.blaze.base.prefetch.FetchExecutor) EventType(com.google.idea.blaze.base.scope.scopes.TimingScope.EventType) WildcardTargetPattern(com.google.idea.blaze.base.model.primitives.WildcardTargetPattern) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) TargetExpression(com.google.idea.blaze.base.model.primitives.TargetExpression) ArrayList(java.util.ArrayList) List(java.util.List) File(java.io.File) Nullable(javax.annotation.Nullable)

Aggregations

ImmutableMap (com.google.common.collect.ImmutableMap)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1 Futures (com.google.common.util.concurrent.Futures)1 ListenableFuture (com.google.common.util.concurrent.ListenableFuture)1 FutureUtil (com.google.idea.blaze.base.async.FutureUtil)1 FutureResult (com.google.idea.blaze.base.async.FutureUtil.FutureResult)1 BuildSystemProvider (com.google.idea.blaze.base.bazel.BuildSystemProvider)1 FileOperationProvider (com.google.idea.blaze.base.io.FileOperationProvider)1 TargetExpression (com.google.idea.blaze.base.model.primitives.TargetExpression)1 WildcardTargetPattern (com.google.idea.blaze.base.model.primitives.WildcardTargetPattern)1 WorkspacePath (com.google.idea.blaze.base.model.primitives.WorkspacePath)1 FetchExecutor (com.google.idea.blaze.base.prefetch.FetchExecutor)1 BlazeContext (com.google.idea.blaze.base.scope.BlazeContext)1 EventType (com.google.idea.blaze.base.scope.scopes.TimingScope.EventType)1 WorkspacePathResolver (com.google.idea.blaze.base.sync.workspace.WorkspacePathResolver)1 WorkspacePathUtil (com.google.idea.blaze.base.util.WorkspacePathUtil)1 File (java.io.File)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1