Skip to content

Commit

Permalink
[bazelbuild#6664] Add basic model for ExternalWorkspaces - 1/n
Browse files Browse the repository at this point in the history
  • Loading branch information
mtoader committed Aug 28, 2024
1 parent b67720a commit f3645e7
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 0 deletions.
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,45 @@
package com.google.idea.blaze.base.model;

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,
e -> e))
);
}

@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,49 @@
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();
}

}
9 changes: 9 additions & 0 deletions proto/project_data.proto
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,14 @@ 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 +257,5 @@ message BlazeProjectData {
WorkspaceLanguageSettings workspace_language_settings = 6;
SyncState sync_state = 7;
TargetData target_data = 8;
ExternalWorkspaceData external_workspace_data = 9;
}

0 comments on commit f3645e7

Please sign in to comment.