aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java60
1 files changed, 43 insertions, 17 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
index 1f3ef8770a..e90f856709 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
@@ -32,6 +32,8 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.LazyString;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -51,6 +53,7 @@ import javax.annotation.Nullable;
/** A customizable, serializable class for building memory efficient command lines. */
@Immutable
+@AutoCodec
public final class CustomCommandLine extends CommandLine {
private interface ArgvFragment {
@@ -151,6 +154,7 @@ public final class CustomCommandLine extends CommandLine {
* -> ["1:2:3"]
* </pre>
*/
+ @AutoCodec
public static class VectorArg<T> {
final boolean isNestedSet;
final boolean isEmpty;
@@ -159,7 +163,9 @@ public final class CustomCommandLine extends CommandLine {
final String beforeEach;
final String joinWith;
- private VectorArg(
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ VectorArg(
boolean isNestedSet,
boolean isEmpty,
int count,
@@ -180,28 +186,43 @@ public final class CustomCommandLine extends CommandLine {
* <p>Call {@link SimpleVectorArg#mapped} to produce a vector arg that maps from a given type to
* a string.
*/
+ @AutoCodec
public static class SimpleVectorArg<T> extends VectorArg<T> {
private final Iterable<T> values;
private SimpleVectorArg(Builder builder, @Nullable Collection<T> values) {
- super(
+ this(
false /* isNestedSet */,
values == null || values.isEmpty(),
values != null ? values.size() : 0,
builder.formatEach,
builder.beforeEach,
- builder.joinWith);
- this.values = values;
+ builder.joinWith,
+ values);
}
private SimpleVectorArg(Builder builder, @Nullable NestedSet<T> values) {
- super(
+ this(
true /* isNestedSet */,
values == null || values.isEmpty(),
-1 /* count */,
builder.formatEach,
builder.beforeEach,
- builder.joinWith);
+ builder.joinWith,
+ values);
+ }
+
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ SimpleVectorArg(
+ boolean isNestedSet,
+ boolean isEmpty,
+ int count,
+ String formatEach,
+ String beforeEach,
+ String joinWith,
+ @Nullable Iterable<T> values) {
+ super(isNestedSet, isEmpty, count, formatEach, beforeEach, joinWith);
this.values = values;
}
@@ -331,7 +352,8 @@ public final class CustomCommandLine extends CommandLine {
}
}
- private static final class VectorArgFragment implements ArgvFragment {
+ @AutoCodec
+ static final class VectorArgFragment implements ArgvFragment {
private static Interner<VectorArgFragment> interner = BlazeInterners.newStrongInterner();
private static final UUID FORMAT_EACH_UUID =
UUID.fromString("f830781f-2e0d-4e3b-9b99-ece7f249e0f3");
@@ -346,7 +368,9 @@ public final class CustomCommandLine extends CommandLine {
private final boolean hasBeforeEach;
private final boolean hasJoinWith;
- private VectorArgFragment(
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ VectorArgFragment(
boolean isNestedSet,
boolean hasMapEach,
boolean hasFormatEach,
@@ -607,12 +631,14 @@ public final class CustomCommandLine extends CommandLine {
}
}
- private static final class ExpandedTreeArtifactExecPathsArg
- extends TreeArtifactExpansionArgvFragment {
+ @AutoCodec
+ static final class ExpandedTreeArtifactExecPathsArg extends TreeArtifactExpansionArgvFragment {
private final Artifact treeArtifact;
private static final UUID TREE_UUID = UUID.fromString("13b7626b-c77d-4a30-ad56-ff08c06b1cee");
- private ExpandedTreeArtifactExecPathsArg(Artifact treeArtifact) {
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ ExpandedTreeArtifactExecPathsArg(Artifact treeArtifact) {
Preconditions.checkArgument(
treeArtifact.isTreeArtifact(), "%s is not a TreeArtifact", treeArtifact);
this.treeArtifact = treeArtifact;
@@ -1129,7 +1155,7 @@ public final class CustomCommandLine extends CommandLine {
builder.arguments.addAll(other.arguments);
return builder;
}
-
+
private final ImmutableList<Object> arguments;
/**
@@ -1142,14 +1168,14 @@ public final class CustomCommandLine extends CommandLine {
private final Map<Artifact, TreeFileArtifact> substitutionMap;
private CustomCommandLine(List<Object> arguments) {
- this.arguments = ImmutableList.copyOf(arguments);
- this.substitutionMap = null;
+ this(arguments, null);
}
- private CustomCommandLine(
- List<Object> arguments, Map<Artifact, TreeFileArtifact> substitutionMap) {
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ CustomCommandLine(List<Object> arguments, Map<Artifact, TreeFileArtifact> substitutionMap) {
this.arguments = ImmutableList.copyOf(arguments);
- this.substitutionMap = ImmutableMap.copyOf(substitutionMap);
+ this.substitutionMap = substitutionMap == null ? null : ImmutableMap.copyOf(substitutionMap);
}
/**