Skip to content

Commit

Permalink
Always recreate BlazeProjectSnapshot from raw data
Browse files Browse the repository at this point in the history
instead of repeatedly applying `ArtifactTracker` related transformation to
an existing state.

PiperOrigin-RevId: 570054517
  • Loading branch information
Googler authored and copybara-github committed Oct 2, 2023
1 parent dac806a commit f568dbf
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ UpdateResult update(Set<Label> targets, RenderJarInfo renderJarInfo, BlazeContex
* <p>When additional artifacts are brought into the IDE they may require additional configuration
* to be applied to the IDE project.
*/
ProjectProto.Project updateProjectProto(ProjectProto.Project projectProto) throws IOException;
ProjectProto.Project updateProjectProto(ProjectProto.Project projectProto) throws BuildException;

/**
* Returns a list of local cache files that build by target provided. Returns Optional.empty() if
Expand Down
17 changes: 7 additions & 10 deletions base/src/com/google/idea/blaze/base/qsync/QuerySyncProject.java
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,8 @@ public void sync(BlazeContext parentContext, Optional<PostQuerySyncData> lastQue
? projectQuerier.fullQuery(projectDefinition, context)
: projectQuerier.update(projectDefinition, lastQuery.get(), context);
BlazeProjectSnapshot newSnapshot =
blazeProjectSnapshotBuilder.createBlazeProjectSnapshot(context, postQuerySyncData);
newSnapshot =
newSnapshot.toBuilder()
.project(artifactTracker.updateProjectProto(newSnapshot.project()))
.build();
blazeProjectSnapshotBuilder.createBlazeProjectSnapshot(
context, postQuerySyncData, artifactTracker::updateProjectProto);
onNewSnapshot(context, newSnapshot);

// TODO: Revisit SyncListeners once we switch fully to qsync
Expand Down Expand Up @@ -240,11 +237,11 @@ public void build(BlazeContext parentContext, Set<Label> projectTargets)
try (BlazeContext context = BlazeContext.create(parentContext)) {
context.push(new BuildDepsStatsScope());
if (getDependencyTracker().buildDependenciesForTargets(context, projectTargets)) {
BlazeProjectSnapshot newSnapshot = snapshotHolder.getCurrent().orElseThrow();
newSnapshot =
newSnapshot.toBuilder()
.project(artifactTracker.updateProjectProto(newSnapshot.project()))
.build();
BlazeProjectSnapshot newSnapshot =
blazeProjectSnapshotBuilder.createBlazeProjectSnapshot(
context,
snapshotHolder.getCurrent().orElseThrow().queryData(),
artifactTracker::updateProjectProto);
onNewSnapshot(context, newSnapshot);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -513,11 +513,16 @@ private void updateMaps(Set<Label> targets, BuildArtifacts newArtifacts) {

@Override
public ProjectProto.Project updateProjectProto(ProjectProto.Project projectProto)
throws IOException {
throws BuildException {

Path genSrcCacheRelativeToProject =
ideProjectBasePath.relativize(generatedSrcFileCacheDirectory);
ImmutableList<Path> subfolders = getGenSrcSubfolders();
ImmutableList<Path> subfolders;
try {
subfolders = getGenSrcSubfolders();
} catch (IOException e) {
throw new BuildException(e);
}
GeneratedSourceProjectUpdater updater =
new GeneratedSourceProjectUpdater(projectProto, genSrcCacheRelativeToProject, subfolders);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
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.project.ProjectProto.Project;
import com.google.idea.blaze.qsync.query.QuerySummary;
import java.nio.file.Path;

Expand All @@ -48,8 +49,22 @@ public BlazeProjectSnapshotBuilder(
this.handledRuleKinds = handledRuleKinds;
}

/** {@code Function<ProjectProto.Project, ProjectProto.Project>} that can throw exceptions. */
@FunctionalInterface
public interface ProjectProtoTransform {
ProjectProto.Project apply(ProjectProto.Project proto) throws BuildException;
}

/**
* Creates a {@link BlazeProjectSnapshot}, which includes an expected IDE project structure, from
* the {@code postQuerySyncData} and a function {@code applyBuiltDependenciesTransform} that
* applies transformations required to account for any currently synced(i.e. built) dependencies.
*/
public BlazeProjectSnapshot createBlazeProjectSnapshot(
Context<?> context, PostQuerySyncData postQuerySyncData) throws BuildException {
Context<?> context,
PostQuerySyncData postQuerySyncData,
ProjectProtoTransform applyBuiltDependenciesTransform)
throws BuildException {
Path effectiveWorkspaceRoot =
postQuerySyncData.vcsState().flatMap(s -> s.workspaceSnapshotPath).orElse(workspaceRoot);
WorkspaceResolvingPackageReader packageReader =
Expand All @@ -63,7 +78,12 @@ public BlazeProjectSnapshot createBlazeProjectSnapshot(
executor);
QuerySummary querySummary = postQuerySyncData.querySummary();
BuildGraphData graph = new BlazeQueryParser(querySummary, context, handledRuleKinds).parse();
ProjectProto.Project project = graphToProjectConverter.createProject(graph);
Project project = null;
try {
project = applyBuiltDependenciesTransform.apply(graphToProjectConverter.createProject(graph));
} catch (Exception e) {
throw new BuildException(e);
}
return BlazeProjectSnapshot.builder()
.queryData(postQuerySyncData)
.graph(graph)
Expand Down

0 comments on commit f568dbf

Please sign in to comment.