diff --git a/base/src/com/google/idea/blaze/base/qsync/ProjectQuerierImpl.java b/base/src/com/google/idea/blaze/base/qsync/ProjectQuerierImpl.java index 13170134ef2..b5fea1d4076 100644 --- a/base/src/com/google/idea/blaze/base/qsync/ProjectQuerierImpl.java +++ b/base/src/com/google/idea/blaze/base/qsync/ProjectQuerierImpl.java @@ -78,7 +78,8 @@ public BlazeProjectSnapshot fullQuery(ProjectDefinition projectDef, BlazeContext RefreshOperation fullQuery = projectRefresher.startFullUpdate(context, projectDef, vcsState); QuerySpec querySpec = fullQuery.getQuerySpec().get(); - return fullQuery.createBlazeProject(queryRunner.runQuery(querySpec, context)); + return projectRefresher.createBlazeProjectSnapshot( + context, fullQuery.createPostQuerySyncData(queryRunner.runQuery(querySpec, context))); } private Optional getVcsState(BlazeContext context) { @@ -133,6 +134,7 @@ public BlazeProjectSnapshot update( } else { querySummary = QuerySummary.EMPTY; } - return refresh.createBlazeProject(querySummary); + return projectRefresher.createBlazeProjectSnapshot( + context, refresh.createPostQuerySyncData(querySummary)); } } diff --git a/querysync/java/com/google/idea/blaze/qsync/FullProjectUpdate.java b/querysync/java/com/google/idea/blaze/qsync/FullProjectUpdate.java index d15597ed296..4bcebceda75 100644 --- a/querysync/java/com/google/idea/blaze/qsync/FullProjectUpdate.java +++ b/querysync/java/com/google/idea/blaze/qsync/FullProjectUpdate.java @@ -15,16 +15,10 @@ */ package com.google.idea.blaze.qsync; -import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.ListeningExecutorService; import com.google.idea.blaze.common.Context; import com.google.idea.blaze.common.vcs.VcsState; -import com.google.idea.blaze.exception.BuildException; -import com.google.idea.blaze.qsync.project.BlazeProjectSnapshot; -import com.google.idea.blaze.qsync.project.BuildGraphData; import com.google.idea.blaze.qsync.project.PostQuerySyncData; import com.google.idea.blaze.qsync.project.ProjectDefinition; -import com.google.idea.blaze.qsync.project.ProjectProto; import com.google.idea.blaze.qsync.query.QuerySpec; import com.google.idea.blaze.qsync.query.QuerySummary; import java.io.IOException; @@ -41,27 +35,18 @@ public class FullProjectUpdate implements RefreshOperation { private final Context context; private final Path effectiveWorkspaceRoot; - private final BlazeQueryParser.Factory queryParserFactory; private final ProjectDefinition projectDefinition; private final Optional vcsState; - private final GraphToProjectConverter graphToProjectConverter; public FullProjectUpdate( Context context, - ListeningExecutorService executor, Path effectiveWorkspaceRoot, ProjectDefinition definition, - PackageReader packageReader, - Optional vcsState, - ImmutableSet handledRuleKinds) { + Optional vcsState) { this.context = context; this.effectiveWorkspaceRoot = effectiveWorkspaceRoot; this.projectDefinition = definition; this.vcsState = vcsState; - this.queryParserFactory = new BlazeQueryParser.Factory(context, handledRuleKinds); - this.graphToProjectConverter = - new GraphToProjectConverter( - packageReader, effectiveWorkspaceRoot, context, projectDefinition, executor); } @Override @@ -71,15 +56,11 @@ public Optional getQuerySpec() throws IOException { } @Override - public BlazeProjectSnapshot createBlazeProject(QuerySummary output) throws BuildException { - PostQuerySyncData newData = - PostQuerySyncData.builder() - .setProjectDefinition(projectDefinition) - .setVcsState(vcsState) - .setQuerySummary(output) - .build(); - BuildGraphData graph = queryParserFactory.newParser(newData.querySummary()).parse(); - ProjectProto.Project project = graphToProjectConverter.createProject(graph); - return BlazeProjectSnapshot.builder().queryData(newData).graph(graph).project(project).build(); + public PostQuerySyncData createPostQuerySyncData(QuerySummary output) { + return PostQuerySyncData.builder() + .setProjectDefinition(projectDefinition) + .setVcsState(vcsState) + .setQuerySummary(output) + .build(); } } diff --git a/querysync/java/com/google/idea/blaze/qsync/NoopProjectRefresh.java b/querysync/java/com/google/idea/blaze/qsync/NoopProjectRefresh.java index 9256cf649b5..fb9ceda3deb 100644 --- a/querysync/java/com/google/idea/blaze/qsync/NoopProjectRefresh.java +++ b/querysync/java/com/google/idea/blaze/qsync/NoopProjectRefresh.java @@ -16,6 +16,7 @@ package com.google.idea.blaze.qsync; import com.google.idea.blaze.qsync.project.BlazeProjectSnapshot; +import com.google.idea.blaze.qsync.project.PostQuerySyncData; import com.google.idea.blaze.qsync.query.QuerySpec; import com.google.idea.blaze.qsync.query.QuerySummary; import java.util.Optional; @@ -41,7 +42,7 @@ public Optional getQuerySpec() { } @Override - public BlazeProjectSnapshot createBlazeProject(QuerySummary output) { - return latestProjectSnapshotSupplier.get(); + public PostQuerySyncData createPostQuerySyncData(QuerySummary output) { + return latestProjectSnapshotSupplier.get().queryData(); } } diff --git a/querysync/java/com/google/idea/blaze/qsync/PartialProjectRefresh.java b/querysync/java/com/google/idea/blaze/qsync/PartialProjectRefresh.java index 79fa3f0283b..e265dd7f357 100644 --- a/querysync/java/com/google/idea/blaze/qsync/PartialProjectRefresh.java +++ b/querysync/java/com/google/idea/blaze/qsync/PartialProjectRefresh.java @@ -19,15 +19,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.idea.blaze.common.Context; import com.google.idea.blaze.common.Label; import com.google.idea.blaze.common.vcs.VcsState; -import com.google.idea.blaze.exception.BuildException; -import com.google.idea.blaze.qsync.project.BlazeProjectSnapshot; -import com.google.idea.blaze.qsync.project.BuildGraphData; import com.google.idea.blaze.qsync.project.PostQuerySyncData; -import com.google.idea.blaze.qsync.project.ProjectProto; import com.google.idea.blaze.qsync.query.Query; import com.google.idea.blaze.qsync.query.Query.SourceFile; import com.google.idea.blaze.qsync.query.QuerySpec; @@ -47,38 +41,21 @@ class PartialProjectRefresh implements RefreshOperation { private final Path effectiveWorkspaceRoot; private final PostQuerySyncData previousState; - private final BlazeQueryParser.Factory queryParserFactory; - private final GraphToProjectConverter graphToProjectConverter; - private final PostQuerySyncData.Builder newState; + private final Optional currentVcsState; @VisibleForTesting final ImmutableSet modifiedPackages; @VisibleForTesting final ImmutableSet deletedPackages; PartialProjectRefresh( - Context context, - ListeningExecutorService executor, Path effectiveWorkspaceRoot, - PackageReader packageReader, PostQuerySyncData previousState, Optional currentVcsState, ImmutableSet modifiedPackages, - ImmutableSet deletedPackages, - ImmutableSet handledRuleKinds) { + ImmutableSet deletedPackages) { this.effectiveWorkspaceRoot = effectiveWorkspaceRoot; this.previousState = previousState; - this.newState = - PostQuerySyncData.builder() - .setVcsState(currentVcsState) - .setProjectDefinition(previousState.projectDefinition()); + this.currentVcsState = currentVcsState; this.modifiedPackages = modifiedPackages; this.deletedPackages = deletedPackages; - this.queryParserFactory = new BlazeQueryParser.Factory(context, handledRuleKinds); - this.graphToProjectConverter = - new GraphToProjectConverter( - packageReader, - effectiveWorkspaceRoot, - context, - previousState.projectDefinition(), - executor); } private Optional createQuerySpec() { @@ -96,21 +73,17 @@ private Optional createQuerySpec() { @Override public Optional getQuerySpec() { - Optional querySpec = createQuerySpec(); - return querySpec; + return createQuerySpec(); } @Override - public BlazeProjectSnapshot createBlazeProject(QuerySummary partialQuery) throws BuildException { + public PostQuerySyncData createPostQuerySyncData(QuerySummary partialQuery) { Preconditions.checkNotNull(partialQuery, "queryOutput"); QuerySummary effectiveQuery = applyDelta(partialQuery); - PostQuerySyncData postQuerySyncData = newState.setQuerySummary(effectiveQuery).build(); - BuildGraphData graph = queryParserFactory.newParser(effectiveQuery).parse(); - ProjectProto.Project project = graphToProjectConverter.createProject(graph); - return BlazeProjectSnapshot.builder() - .queryData(postQuerySyncData) - .graph(graph) - .project(project) + return PostQuerySyncData.builder() + .setVcsState(currentVcsState) + .setProjectDefinition(previousState.projectDefinition()) + .setQuerySummary(effectiveQuery) .build(); } diff --git a/querysync/java/com/google/idea/blaze/qsync/ProjectRefresher.java b/querysync/java/com/google/idea/blaze/qsync/ProjectRefresher.java index fe69d3f08ae..3052dfc4ff9 100644 --- a/querysync/java/com/google/idea/blaze/qsync/ProjectRefresher.java +++ b/querysync/java/com/google/idea/blaze/qsync/ProjectRefresher.java @@ -22,8 +22,10 @@ import com.google.idea.blaze.common.vcs.VcsState; import com.google.idea.blaze.exception.BuildException; import com.google.idea.blaze.qsync.project.BlazeProjectSnapshot; +import com.google.idea.blaze.qsync.project.BuildGraphData; import com.google.idea.blaze.qsync.project.PostQuerySyncData; import com.google.idea.blaze.qsync.project.ProjectDefinition; +import com.google.idea.blaze.qsync.project.ProjectProto; import java.nio.file.Path; import java.util.Optional; import java.util.function.Supplier; @@ -60,14 +62,7 @@ public RefreshOperation startFullUpdate( Context context, ProjectDefinition spec, Optional vcsState) { Path effectiveWorkspaceRoot = vcsState.flatMap(s -> s.workspaceSnapshotPath).orElse(workspaceRoot); - return new FullProjectUpdate( - context, - executor, - effectiveWorkspaceRoot, - spec, - new WorkspaceResolvingPackageReader(effectiveWorkspaceRoot, workspaceRelativePackageReader), - vcsState, - handledRuleKinds); + return new FullProjectUpdate(context, effectiveWorkspaceRoot, spec, vcsState); } public RefreshOperation startPartialRefresh( @@ -103,15 +98,34 @@ public RefreshOperation startPartialRefresh(RefreshParameters params, Context Path effectiveWorkspaceRoot = params.latestVcsState.flatMap(s -> s.workspaceSnapshotPath).orElse(workspaceRoot); return new PartialProjectRefresh( - context, - executor, effectiveWorkspaceRoot, - new WorkspaceResolvingPackageReader(effectiveWorkspaceRoot, workspaceRelativePackageReader), params.currentProject, params.latestVcsState, affected.getModifiedPackages(), - affected.getDeletedPackages(), - handledRuleKinds); + affected.getDeletedPackages()); } + public BlazeProjectSnapshot createBlazeProjectSnapshot( + Context context, PostQuerySyncData postQuerySyncData) throws BuildException { + BlazeQueryParser.Factory queryParserFactory = + new BlazeQueryParser.Factory(context, handledRuleKinds); + Path effectiveWorkspaceRoot = + postQuerySyncData.vcsState().flatMap(s -> s.workspaceSnapshotPath).orElse(workspaceRoot); + WorkspaceResolvingPackageReader packageReader = + new WorkspaceResolvingPackageReader(effectiveWorkspaceRoot, workspaceRelativePackageReader); + GraphToProjectConverter graphToProjectConverter = + new GraphToProjectConverter( + packageReader, + effectiveWorkspaceRoot, + context, + postQuerySyncData.projectDefinition(), + executor); + BuildGraphData graph = queryParserFactory.newParser(postQuerySyncData.querySummary()).parse(); + ProjectProto.Project project = graphToProjectConverter.createProject(graph); + return BlazeProjectSnapshot.builder() + .queryData(postQuerySyncData) + .graph(graph) + .project(project) + .build(); + } } diff --git a/querysync/java/com/google/idea/blaze/qsync/RefreshOperation.java b/querysync/java/com/google/idea/blaze/qsync/RefreshOperation.java index c521a1962a1..a7e5c192baf 100644 --- a/querysync/java/com/google/idea/blaze/qsync/RefreshOperation.java +++ b/querysync/java/com/google/idea/blaze/qsync/RefreshOperation.java @@ -15,8 +15,8 @@ */ package com.google.idea.blaze.qsync; -import com.google.idea.blaze.exception.BuildException; import com.google.idea.blaze.qsync.project.BlazeProjectSnapshot; +import com.google.idea.blaze.qsync.project.PostQuerySyncData; import com.google.idea.blaze.qsync.query.QuerySpec; import com.google.idea.blaze.qsync.query.QuerySummary; import java.io.IOException; @@ -30,8 +30,8 @@ *
    *
  1. Acquire an implementation, e.g. from {@link ProjectRefresher} *
  2. Run a {@code query} invocation based on the spec from {@link #getQuerySpec()} - *
  3. To get the updated project snapshot pass the results of that query to {@link - * #createBlazeProject(QuerySummary)}. + *
  4. To get the updated {@link PostQuerySyncData} pass the results of that query to {@link + * #createPostQuerySyncData(QuerySummary)}. *
*/ public interface RefreshOperation { @@ -40,5 +40,5 @@ public interface RefreshOperation { Optional getQuerySpec() throws IOException; /** Creates the new project snapshot. */ - BlazeProjectSnapshot createBlazeProject(QuerySummary output) throws BuildException; + PostQuerySyncData createPostQuerySyncData(QuerySummary output); } diff --git a/querysync/javatests/com/google/idea/blaze/qsync/PartialProjectRefreshTest.java b/querysync/javatests/com/google/idea/blaze/qsync/PartialProjectRefreshTest.java index e0da12e3707..b8f1c11c16c 100644 --- a/querysync/javatests/com/google/idea/blaze/qsync/PartialProjectRefreshTest.java +++ b/querysync/javatests/com/google/idea/blaze/qsync/PartialProjectRefreshTest.java @@ -17,7 +17,6 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth8.assertThat; -import static com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService; import com.google.common.collect.ImmutableSet; import com.google.idea.blaze.common.Label; @@ -99,14 +98,10 @@ public void testApplyDelta_replacePackage() { PartialProjectRefresh queryStrategy = new PartialProjectRefresh( - QuerySyncTestUtils.NOOP_CONTEXT, - newDirectExecutorService(), Path.of("/workspace/root"), - QuerySyncTestUtils.EMPTY_PACKAGE_READER, baseProject, QuerySyncTestUtils.CLEAN_VCS_STATE, /* modifiedPackages= */ ImmutableSet.of(Path.of("my/build/package1")), - ImmutableSet.of(), ImmutableSet.of()); QuerySummary applied = queryStrategy.applyDelta(delta); assertThat(applied.getRulesMap().keySet()) @@ -168,15 +163,11 @@ public void testApplyDelta_deletePackage() { PartialProjectRefresh queryStrategy = new PartialProjectRefresh( - QuerySyncTestUtils.NOOP_CONTEXT, - newDirectExecutorService(), Path.of("/workspace/root"), - QuerySyncTestUtils.EMPTY_PACKAGE_READER, baseProject, QuerySyncTestUtils.CLEAN_VCS_STATE, ImmutableSet.of(), - /* deletedPackages= */ ImmutableSet.of(Path.of("my/build/package1")), - ImmutableSet.of()); + /* deletedPackages= */ ImmutableSet.of(Path.of("my/build/package1"))); assertThat(queryStrategy.getQuerySpec()).isEmpty(); QuerySummary applied = queryStrategy.applyDelta(QuerySummary.EMPTY); assertThat(applied.getRulesMap().keySet()) @@ -233,14 +224,10 @@ public void testDelta_addPackage() { PartialProjectRefresh queryStrategy = new PartialProjectRefresh( - QuerySyncTestUtils.NOOP_CONTEXT, - newDirectExecutorService(), Path.of("/workspace/root"), - QuerySyncTestUtils.EMPTY_PACKAGE_READER, baseProject, QuerySyncTestUtils.CLEAN_VCS_STATE, /* modifiedPackages= */ ImmutableSet.of(Path.of("my/build/package2")), - ImmutableSet.of(), ImmutableSet.of()); QuerySummary applied = queryStrategy.applyDelta(delta); assertThat(applied.getRulesMap().keySet()) @@ -267,14 +254,10 @@ public void testDelta_packagesWithErrors() { PartialProjectRefresh queryStrategy = new PartialProjectRefresh( - QuerySyncTestUtils.NOOP_CONTEXT, - newDirectExecutorService(), Path.of("/workspace/root"), - QuerySyncTestUtils.EMPTY_PACKAGE_READER, baseProject, QuerySyncTestUtils.CLEAN_VCS_STATE, /* modifiedPackages= */ ImmutableSet.of(Path.of("my/build/package")), - ImmutableSet.of(), ImmutableSet.of()); QuerySummary applied = queryStrategy.applyDelta(delta); assertThat(applied.getPackagesWithErrors()).containsExactly(Path.of("my/build/package")); diff --git a/querysync/javatests/com/google/idea/blaze/qsync/ProjectRefresherTest.java b/querysync/javatests/com/google/idea/blaze/qsync/ProjectRefresherTest.java index 2b0973c0a83..0b9e3a52d04 100644 --- a/querysync/javatests/com/google/idea/blaze/qsync/ProjectRefresherTest.java +++ b/querysync/javatests/com/google/idea/blaze/qsync/ProjectRefresherTest.java @@ -106,7 +106,8 @@ public void testStartPartialRefresh_vcsSnapshotUnchanged_existingProjectSnapshot project.vcsState(), project.projectDefinition()); assertThat(update).isInstanceOf(NoopProjectRefresh.class); - assertThat(update.createBlazeProject(QuerySummary.EMPTY)).isSameInstanceAs(existingProject); + assertThat(update.createPostQuerySyncData(QuerySummary.EMPTY)) + .isSameInstanceAs(existingProject.queryData()); } @Test