diff --git a/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunner.java b/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunner.java index 54a3d344676..bac8bd60809 100644 --- a/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunner.java +++ b/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunner.java @@ -46,6 +46,13 @@ public abstract ListenableFuture dumpRepoMapping( BuildSystemName buildSystemName, List flags); + public abstract ListenableFuture getDeps( + Project project, + BuildInvoker invoker, + BlazeContext context, + BuildSystemName buildSystemName, + List flags); + /** * @param args The arguments passed into `blaze mod ...` * @param flags The blaze flags that will be passed to {@code blaze ...} diff --git a/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunnerImpl.java b/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunnerImpl.java index 3d543d3c160..433f0de51f8 100644 --- a/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunnerImpl.java +++ b/base/src/com/google/idea/blaze/base/command/mod/BlazeModRunnerImpl.java @@ -39,6 +39,7 @@ public class BlazeModRunnerImpl extends BlazeModRunner { private static final String DUMP_REPO_MAPPING = "dump_repo_mapping"; + private static final String DEPS = "deps"; private static final String ROOT_WORKSPACE = ""; /** @@ -82,6 +83,26 @@ public ListenableFuture dumpRepoMapping( BlazeExecutor.getInstance().getExecutor()); } + @Override + public ListenableFuture getDeps( + Project project, + BuildSystem.BuildInvoker invoker, + BlazeContext context, + BuildSystemName buildSystemName, + List flags) { + + // TODO: when 8.0.0 is released add this only if it's disabled explicitly for the repo + flags.add("--noenable_workspace"); + + return Futures.transform( + runBlazeModGetBytes( + project, invoker, context, ImmutableList.of(DEPS, ROOT_WORKSPACE, "--output=json"), flags), + bytes -> new String(bytes, StandardCharsets.UTF_8), + BlazeExecutor.getInstance().getExecutor() + ); + + } + @Override protected ListenableFuture runBlazeModGetBytes( Project project, diff --git a/base/src/com/google/idea/blaze/base/model/ExternalWorkspaceDataProvider.java b/base/src/com/google/idea/blaze/base/model/ExternalWorkspaceDataProvider.java index 5d1656eaad0..a5fa8e6371f 100644 --- a/base/src/com/google/idea/blaze/base/model/ExternalWorkspaceDataProvider.java +++ b/base/src/com/google/idea/blaze/base/model/ExternalWorkspaceDataProvider.java @@ -46,6 +46,7 @@ public class ExternalWorkspaceDataProvider { private final Project project; private volatile ExternalWorkspaceData externalWorkspaceData; + private ListenableFuture deps; public ExternalWorkspaceDataProvider(Project project) { this.project = project; @@ -104,11 +105,13 @@ public ListenableFuture getExternalWorkspaceData( .getBuildSystem() .getDefaultInvoker(project, context); + deps = BlazeModRunner.getInstance().getDeps(project, buildInvoker, context, importSettings.getBuildSystem(), blazeFlags); externalWorkspaceData = BlazeModRunner.getInstance() .dumpRepoMapping( project, buildInvoker, context, importSettings.getBuildSystem(), blazeFlags) .get(); + deps.get(); } catch (InterruptedException | ExecutionException e) { context.handleExceptionAsWarning( "Failed to run `blaze mod dump_repo_mapping` (completion of labels from module provided repos will be unavailable)", diff --git a/base/tests/utils/integration/com/google/idea/blaze/base/sync/BlazeSyncIntegrationTestCase.java b/base/tests/utils/integration/com/google/idea/blaze/base/sync/BlazeSyncIntegrationTestCase.java index 919c30623e3..064ae9a331e 100644 --- a/base/tests/utils/integration/com/google/idea/blaze/base/sync/BlazeSyncIntegrationTestCase.java +++ b/base/tests/utils/integration/com/google/idea/blaze/base/sync/BlazeSyncIntegrationTestCase.java @@ -367,6 +367,11 @@ public ListenableFuture dumpRepoMapping( return Futures.immediateFuture(ExternalWorkspaceData.EMPTY); } + @Override + public ListenableFuture getDeps(Project project, BuildInvoker invoker, BlazeContext context, BuildSystemName buildSystemName, List flags) { + return Futures.immediateFuture(null); + } + @Override protected ListenableFuture runBlazeModGetBytes( Project project,