Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#6664] Add basic model for ExternalWorkspaces - 1/n #6669

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public final class AspectSyncProjectData implements BlazeProjectData {
private final WorkspacePathResolver workspacePathResolver;
private final ArtifactLocationDecoder artifactLocationDecoder;
private final WorkspaceLanguageSettings workspaceLanguageSettings;
private final ExternalWorkspaceData externalWorkspaceData;
private final SyncState syncState;

public AspectSyncProjectData(
Expand All @@ -61,13 +62,15 @@ public AspectSyncProjectData(
WorkspacePathResolver workspacePathResolver,
ArtifactLocationDecoder artifactLocationDecoder,
WorkspaceLanguageSettings workspaceLanguageSettings,
ExternalWorkspaceData externalWorkspaceData,
SyncState syncState) {
this.targetData = targetData;
this.blazeInfo = blazeInfo;
this.blazeVersionData = blazeVersionData;
this.workspacePathResolver = workspacePathResolver;
this.artifactLocationDecoder = artifactLocationDecoder;
this.workspaceLanguageSettings = workspaceLanguageSettings;
this.externalWorkspaceData = externalWorkspaceData;
this.syncState = syncState;
}

Expand All @@ -85,6 +88,7 @@ public static AspectSyncProjectData fromProto(
workspacePathResolver,
new ArtifactLocationDecoderImpl(blazeInfo, workspacePathResolver, targetData.remoteOutputs),
WorkspaceLanguageSettings.fromProto(proto.getWorkspaceLanguageSettings()),
ExternalWorkspaceData.fromProto(proto.getExternalWorkspaceData()),
SyncState.fromProto(proto.getSyncState()));
}

Expand Down Expand Up @@ -112,6 +116,7 @@ public ProjectData.BlazeProjectData toProto() {
.setWorkspacePathResolver(workspacePathResolver.toProto())
.setWorkspaceLanguageSettings(workspaceLanguageSettings.toProto())
.setSyncState(syncState.toProto())
.setExternalWorkspaceData(externalWorkspaceData.toProto())
.build();
}

Expand Down Expand Up @@ -187,6 +192,11 @@ public RemoteOutputArtifacts getRemoteOutputs() {
return targetData.remoteOutputs;
}

@Override
public ExternalWorkspaceData getExternalWorkspaceData() {
return externalWorkspaceData;
}

@Override
public SyncState getSyncState() {
return syncState;
Expand Down Expand Up @@ -222,6 +232,7 @@ public boolean equals(Object o) {
AspectSyncProjectData other = (AspectSyncProjectData) o;
return Objects.equals(targetData, other.targetData)
&& Objects.equals(blazeInfo, other.blazeInfo)
&& Objects.equals(externalWorkspaceData, other.externalWorkspaceData)
&& Objects.equals(blazeVersionData, other.blazeVersionData)
&& Objects.equals(workspacePathResolver, other.workspacePathResolver)
&& Objects.equals(artifactLocationDecoder, other.artifactLocationDecoder)
Expand All @@ -238,6 +249,7 @@ public int hashCode() {
workspaceLanguageSettings,
artifactLocationDecoder,
workspaceLanguageSettings,
externalWorkspaceData,
syncState);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ public interface BlazeProjectData {

RemoteOutputArtifacts getRemoteOutputs();

ExternalWorkspaceData getExternalWorkspaceData();

SyncState getSyncState();

boolean isQuerySync();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.google.idea.blaze.base.model;

import com.google.common.base.Functions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.intellij.model.ProjectData;
import com.google.idea.blaze.base.ideinfo.ProtoWrapper;
import com.google.idea.blaze.base.model.primitives.ExternalWorkspace;

public final class ExternalWorkspaceData implements ProtoWrapper<ProjectData.ExternalWorkspaceData> {
public ImmutableMap<String, ExternalWorkspace> workspaces;

public static ExternalWorkspaceData EMPTY = new ExternalWorkspaceData(ImmutableList.of());

public static ExternalWorkspaceData create(ImmutableList<ExternalWorkspace> workspaces) {
return new ExternalWorkspaceData(workspaces);
}

ExternalWorkspaceData(ImmutableList<ExternalWorkspace> workspaces) {
this.workspaces = ImmutableMap.copyOf(
workspaces
.stream()
.collect(
ImmutableMap.toImmutableMap(
ExternalWorkspace::name,
Functions.identity()))
);
}

@Override
public ProjectData.ExternalWorkspaceData toProto() {
ImmutableList<ProjectData.ExternalWorkspace> protoWorkspaces = workspaces
.values()
.stream()
.map(ExternalWorkspace::toProto)
.collect(ImmutableList.toImmutableList());

return ProjectData.ExternalWorkspaceData.newBuilder()
.addAllWorkspaces(protoWorkspaces)
.build();
}

public static ExternalWorkspaceData fromProto(ProjectData.ExternalWorkspaceData proto) {
return new ExternalWorkspaceData(proto.getWorkspacesList().stream().map(ExternalWorkspace::fromProto).collect(ImmutableList.toImmutableList()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.google.idea.blaze.base.model.primitives;

import com.google.devtools.intellij.model.ProjectData;

import javax.annotation.Nullable;

import com.google.auto.value.AutoValue;
import com.google.idea.blaze.base.ideinfo.ProtoWrapper;

@AutoValue
public abstract class ExternalWorkspace implements ProtoWrapper<ProjectData.ExternalWorkspace> {

public abstract String name();

@Nullable
public abstract String repoName();

public static ExternalWorkspace fromProto(ProjectData.ExternalWorkspace proto) {
return create(proto.getName(), proto.getRepoName());
}

@Override
public ProjectData.ExternalWorkspace toProto() {
ProjectData.ExternalWorkspace.Builder builder = ProjectData.ExternalWorkspace.newBuilder().setName(name());
if (repoName() != null && !repoName().isEmpty()) {
builder = builder.setRepoName(repoName());
}
return builder.build();
}

public static ExternalWorkspace create(String name, String repoName) {
ExternalWorkspace.Builder builder = ExternalWorkspace.builder().setName(name);
if (repoName != null && !repoName.isEmpty()) {
builder = builder.setRepoName(repoName);
}
return builder.build();
}

public static ExternalWorkspace.Builder builder() {
return new AutoValue_ExternalWorkspace.Builder();
}

@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setName(String name);

public abstract Builder setRepoName(String repoName);

public abstract ExternalWorkspace build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.google.idea.blaze.base.ideinfo.TargetMap;
import com.google.idea.blaze.base.model.BlazeProjectData;
import com.google.idea.blaze.base.model.BlazeVersionData;
import com.google.idea.blaze.base.model.ExternalWorkspaceData;
import com.google.idea.blaze.base.model.RemoteOutputArtifacts;
import com.google.idea.blaze.base.model.SyncState;
import com.google.idea.blaze.base.model.primitives.Label;
Expand All @@ -34,9 +35,11 @@
import com.google.idea.blaze.qsync.project.ProjectTarget;
import com.google.idea.blaze.qsync.project.QuerySyncLanguage;
import com.intellij.openapi.diagnostic.Logger;

import java.nio.file.Path;
import java.util.Collection;
import java.util.Optional;

import org.jetbrains.annotations.Nullable;

/** Implementation of {@link BlazeProjectData} specific to querysync. */
Expand Down Expand Up @@ -174,6 +177,11 @@ public RemoteOutputArtifacts getRemoteOutputs() {
throw new NotSupportedWithQuerySyncException("getRemoteOutputs");
}

@Override
public ExternalWorkspaceData getExternalWorkspaceData() {
throw new NotSupportedWithQuerySyncException("getExternalWorkspaceData");
}

@Override
public SyncState getSyncState() {
throw new NotSupportedWithQuerySyncException("getSyncState");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.google.idea.blaze.base.model.BlazeLibrary;
import com.google.idea.blaze.base.model.BlazeProjectData;
import com.google.idea.blaze.base.model.BlazeVersionData;
import com.google.idea.blaze.base.model.ExternalWorkspaceData;
import com.google.idea.blaze.base.model.ProjectTargetData;
import com.google.idea.blaze.base.model.RemoteOutputArtifacts;
import com.google.idea.blaze.base.model.SyncState;
Expand Down Expand Up @@ -227,6 +228,7 @@ private void run(BlazeContext context) throws SyncCanceledException, SyncFailedE
projectState.getWorkspacePathResolver(),
artifactLocationDecoder,
projectState.getLanguageSettings(),
ExternalWorkspaceData.EMPTY,
syncStateBuilder.build());

FileCaches.onSync(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.google.idea.blaze.base.sync.workspace.ArtifactLocationDecoderImpl;
import com.google.idea.blaze.base.sync.workspace.WorkspacePathResolver;
import com.google.idea.blaze.base.sync.workspace.WorkspacePathResolverImpl;

import java.io.File;

/**
Expand All @@ -45,6 +46,7 @@ public class MockBlazeProjectDataBuilder {
private WorkspacePathResolver workspacePathResolver;
private ArtifactLocationDecoder artifactLocationDecoder;
private WorkspaceLanguageSettings workspaceLanguageSettings;
private ExternalWorkspaceData externalWorkspaceData;
private SyncState syncState;

private MockBlazeProjectDataBuilder(WorkspaceRoot workspaceRoot) {
Expand Down Expand Up @@ -104,6 +106,12 @@ public MockBlazeProjectDataBuilder setWorkspaceLanguageSettings(
return this;
}

@CanIgnoreReturnValue
public MockBlazeProjectDataBuilder setExternalWorkspaceData(ExternalWorkspaceData externalWorkspaceData) {
this.externalWorkspaceData = externalWorkspaceData;
return this;
}

@CanIgnoreReturnValue
public MockBlazeProjectDataBuilder setSyncState(SyncState syncState) {
this.syncState = syncState;
Expand Down Expand Up @@ -142,6 +150,11 @@ public BlazeProjectData build() {
SyncState syncState =
this.syncState != null ? this.syncState : new SyncState(ImmutableMap.of());

ExternalWorkspaceData externalWorkspaceData =
this.externalWorkspaceData != null
? this.externalWorkspaceData
: ExternalWorkspaceData.EMPTY;

return new AspectSyncProjectData(
new ProjectTargetData(
targetMap, /* ideInterfaceState= */ null, RemoteOutputArtifacts.EMPTY),
Expand All @@ -150,6 +163,7 @@ public BlazeProjectData build() {
workspacePathResolver,
artifactLocationDecoder,
workspaceLanguageSettings,
externalWorkspaceData,
syncState);
}
}
10 changes: 10 additions & 0 deletions proto/project_data.proto
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,15 @@ message SyncState {
RemoteOutputArtifacts remote_output_artifacts = 7 [deprecated = true];
}

message ExternalWorkspace {
string name = 1;
string repo_name = 2;
}

message ExternalWorkspaceData {
repeated ExternalWorkspace workspaces = 1;
}

message BlazeProjectData {
reserved 1;
TargetMap target_map = 2 [deprecated = true];
Expand All @@ -249,4 +258,5 @@ message BlazeProjectData {
WorkspaceLanguageSettings workspace_language_settings = 6;
SyncState sync_state = 7;
TargetData target_data = 8;
ExternalWorkspaceData external_workspace_data = 9;
}
Loading