aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/FailAction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironments.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/BooleanCodec.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/Pair.java6
17 files changed, 167 insertions, 59 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
index 510b0b1f5f..bbc34931b9 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.ArrayList;
@@ -36,7 +37,7 @@ import javax.annotation.Nullable;
*/
public class ActionLookupValue implements SkyValue {
protected final List<ActionAnalysisMetadata> actions;
- private final ImmutableMap<Artifact, Integer> generatingActionIndex;
+ @VisibleForSerialization protected final ImmutableMap<Artifact, Integer> generatingActionIndex;
protected ActionLookupValue(
ActionAnalysisMetadata action,
@@ -47,12 +48,17 @@ public class ActionLookupValue implements SkyValue {
@VisibleForTesting
public ActionLookupValue(
Actions.GeneratingActions generatingActions, boolean removeActionsAfterEvaluation) {
- if (removeActionsAfterEvaluation) {
- this.actions = new ArrayList<>(generatingActions.getActions());
- } else {
- this.actions = ImmutableList.copyOf(generatingActions.getActions());
- }
- this.generatingActionIndex = generatingActions.getGeneratingActionIndex();
+ this(
+ removeActionsAfterEvaluation
+ ? new ArrayList<>(generatingActions.getActions())
+ : ImmutableList.copyOf(generatingActions.getActions()),
+ generatingActions.getGeneratingActionIndex());
+ }
+
+ protected ActionLookupValue(
+ List<ActionAnalysisMetadata> actions, ImmutableMap<Artifact, Integer> generatingActionIndex) {
+ this.actions = actions;
+ this.generatingActionIndex = generatingActionIndex;
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FailAction.java b/src/main/java/com/google/devtools/build/lib/actions/FailAction.java
index a61d2b2f50..eccc4ee2d8 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FailAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FailAction.java
@@ -16,12 +16,14 @@ package com.google.devtools.build.lib.actions;
import com.google.common.collect.ImmutableList;
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.util.Fingerprint;
/**
- * FailAction is an Action that always fails to execute. (Used as scaffolding
- * for rules we haven't yet implemented. Also useful for testing.)
+ * FailAction is an Action that always fails to execute. (Used as scaffolding for rules we haven't
+ * yet implemented. Also useful for testing.)
*/
+@AutoCodec
@Immutable
public final class FailAction extends AbstractAction {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
index 2fc824a10f..a2ba6867df 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
@@ -24,6 +24,8 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.EventHandler;
+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.vfs.PathFragment;
import java.io.BufferedWriter;
@@ -40,15 +42,15 @@ import java.util.Map;
import javax.annotation.Nullable;
/**
- * Action to create a manifest of input files for processing by a subsequent
- * build step (e.g. runfiles symlinking or archive building).
+ * Action to create a manifest of input files for processing by a subsequent build step (e.g.
+ * runfiles symlinking or archive building).
*
- * <p>The manifest's format is specifiable by {@link ManifestType}, in
- * accordance with the needs of the calling functionality.
+ * <p>The manifest's format is specifiable by {@link ManifestType}, in accordance with the needs of
+ * the calling functionality.
*
- * <p>Note that this action carefully avoids building the manifest content in
- * memory.
+ * <p>Note that this action carefully avoids building the manifest content in memory.
*/
+@AutoCodec
@Immutable // if all ManifestWriter implementations are immutable
public final class SourceManifestAction extends AbstractFileWriteAction {
@@ -93,17 +95,18 @@ public final class SourceManifestAction extends AbstractFileWriteAction {
private final Runfiles runfiles;
/**
- * Creates a new AbstractSourceManifestAction instance using latin1 encoding
- * to write the manifest file and with a specified root path for manifest entries.
+ * Creates a new AbstractSourceManifestAction instance using latin1 encoding to write the manifest
+ * file and with a specified root path for manifest entries.
*
* @param manifestWriter the strategy to use to write manifest entries
* @param owner the action owner
- * @param output the file to which to write the manifest
+ * @param primaryOutput the file to which to write the manifest
* @param runfiles runfiles
*/
- private SourceManifestAction(ManifestWriter manifestWriter, ActionOwner owner, Artifact output,
- Runfiles runfiles) {
- super(owner, getDependencies(runfiles), output, false);
+ @VisibleForSerialization
+ SourceManifestAction(
+ ManifestWriter manifestWriter, ActionOwner owner, Artifact primaryOutput, Runfiles runfiles) {
+ super(owner, getDependencies(runfiles), primaryOutput, false);
this.manifestWriter = manifestWriter;
this.runfiles = runfiles;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
index d0aba38bdc..13b7aaaead 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
@@ -76,7 +76,10 @@ public class SymlinkAction extends AbstractAction {
Artifact primaryInput,
Artifact primaryOutput,
String progressMessage) {
- super(owner, ImmutableList.of(primaryInput), ImmutableList.of(primaryOutput));
+ super(
+ owner,
+ primaryInput != null ? ImmutableList.of(primaryInput) : Artifact.NO_ARTIFACTS,
+ ImmutableList.of(primaryOutput));
this.inputPath = inputPath;
this.progressMessage = progressMessage;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
index 372ec570e1..770fee7edd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
@@ -41,6 +41,7 @@ import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
@@ -55,6 +56,7 @@ import javax.annotation.Nullable;
* analyzed rule. For more information about how analysis works, see {@link
* com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory}.
*/
+@AutoCodec
public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
/**
* The configuration transition for an attribute through which a prerequisite
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java
index 7dc850e254..c1ce9f0a1a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java
@@ -21,16 +21,18 @@ import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.EnvironmentLabels;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import java.util.Map;
-/**
- * Contains a set of {@link Environment} labels and their associated groups.
- */
+/** Contains a set of {@link Environment} labels and their associated groups. */
+@AutoCodec
@Immutable
public class EnvironmentCollection {
private final ImmutableMultimap<EnvironmentLabels, Label> map;
- private EnvironmentCollection(ImmutableMultimap<EnvironmentLabels, Label> map) {
+ @VisibleForSerialization
+ EnvironmentCollection(ImmutableMultimap<EnvironmentLabels, Label> map) {
this.map = map;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironments.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironments.java
index 1b89bda6ba..c1eaac7419 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironments.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironments.java
@@ -17,11 +17,11 @@ package com.google.devtools.build.lib.analysis.constraints;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.LabelAndLocation;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import java.util.Map;
-/**
- * Standard {@link SupportedEnvironmentsProvider} implementation.
- */
+/** Standard {@link SupportedEnvironmentsProvider} implementation. */
+@AutoCodec
public class SupportedEnvironments implements SupportedEnvironmentsProvider {
private final EnvironmentCollection staticEnvironments;
private final EnvironmentCollection refinedEnvironments;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java
index d2f080ee2a..4b2ef4bacb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java
@@ -26,6 +26,7 @@ import com.google.devtools.build.lib.actions.UserExecException;
import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.ProtoDeterministicWriter;
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.util.Fingerprint;
import java.io.IOException;
@@ -34,17 +35,17 @@ import java.io.IOException;
* .xa file for use by an extra action. This can only be done at execution time because actions may
* store information only known at execution time into the protocol buffer.
*/
+@AutoCodec
@Immutable // if shadowedAction is immutable
public final class ExtraActionInfoFileWriteAction extends AbstractFileWriteAction {
private static final String UUID = "1759f81d-e72e-477d-b182-c4532bdbaeeb";
private final Action shadowedAction;
- ExtraActionInfoFileWriteAction(ActionOwner owner, Artifact extraActionInfoFile,
- Action shadowedAction) {
- super(owner, ImmutableList.<Artifact>of(), extraActionInfoFile, false);
+ ExtraActionInfoFileWriteAction(ActionOwner owner, Artifact primaryOutput, Action shadowedAction) {
+ super(owner, ImmutableList.<Artifact>of(), primaryOutput, false);
- this.shadowedAction = Preconditions.checkNotNull(shadowedAction, extraActionInfoFile);
+ this.shadowedAction = Preconditions.checkNotNull(shadowedAction, primaryOutput);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
index 0768a8b624..f6601af480 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.syntax.EvalException;
@@ -38,6 +39,7 @@ import java.util.Map;
doc = "Provides access to data about a specific toolchain.",
category = SkylarkModuleCategory.PROVIDER
)
+@AutoCodec
@Immutable
public class ToolchainInfo extends NativeInfo {
@@ -57,6 +59,7 @@ public class ToolchainInfo extends NativeInfo {
/*types=*/ ImmutableList.<SkylarkType>of(SkylarkType.DICT));
/** Skylark constructor and identifier for this provider. */
+ @AutoCodec
public static final NativeProvider<ToolchainInfo> PROVIDER =
new NativeProvider<ToolchainInfo>(ToolchainInfo.class, SKYLARK_NAME, SIGNATURE) {
@Override
@@ -68,8 +71,9 @@ public class ToolchainInfo extends NativeInfo {
}
};
- public ToolchainInfo(Map<String, Object> toolchainData, Location loc) {
- super(PROVIDER, ImmutableMap.copyOf(toolchainData), loc);
+ @AutoCodec.Instantiator
+ public ToolchainInfo(Map<String, Object> values, Location location) {
+ super(PROVIDER, ImmutableMap.copyOf(values), location);
}
public static ToolchainInfo create(Map<String, Object> toolchainData) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java
index b400440ca0..9066595769 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java
@@ -30,6 +30,8 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
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.vfs.PathFragment;
import java.io.IOException;
@@ -38,18 +40,18 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
-/**
- * Generates baseline (empty) coverage for the given non-test target.
- */
+/** Generates baseline (empty) coverage for the given non-test target. */
@VisibleForTesting
+@AutoCodec
@Immutable
public final class BaselineCoverageAction extends AbstractFileWriteAction
implements NotifyOnActionCacheHit {
private final NestedSet<Artifact> instrumentedFiles;
- private BaselineCoverageAction(
- ActionOwner owner, NestedSet<Artifact> instrumentedFiles, Artifact output) {
- super(owner, ImmutableList.<Artifact>of(), output, false);
+ @VisibleForSerialization
+ BaselineCoverageAction(
+ ActionOwner owner, NestedSet<Artifact> instrumentedFiles, Artifact primaryOutput) {
+ super(owner, ImmutableList.<Artifact>of(), primaryOutput, false);
this.instrumentedFiles = instrumentedFiles;
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
index 30b7ae8abf..3aae40312f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
@@ -16,6 +16,8 @@ package com.google.devtools.build.lib.packages;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
+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.syntax.EvalException;
import com.google.devtools.build.lib.syntax.FunctionSignature;
import com.google.devtools.build.lib.syntax.SkylarkType;
@@ -108,12 +110,14 @@ public abstract class NativeProvider<V extends Info> extends Provider {
this(clazz, name, SIGNATURE);
}
+ @SuppressWarnings("unchecked")
protected NativeProvider(
Class<V> valueClass,
String name,
FunctionSignature.WithValues<Object, SkylarkType> signature) {
super(name, signature, Location.BUILTIN);
- key = new NativeKey(name, getClass());
+ Class<? extends NativeProvider<?>> clazz = (Class<? extends NativeProvider<?>>) getClass();
+ key = new NativeKey(name, clazz);
this.valueClass = valueClass;
errorMessageFormatForUnknownField = String.format("'%s' object has no attribute '%%s'", name);
}
@@ -170,10 +174,12 @@ public abstract class NativeProvider<V extends Info> extends Provider {
return Pair.of(key.name, key.aClass.getName());
}
+ @SuppressWarnings("unchecked")
public static NativeKey getNativeKeyFromSerializedRepresentation(Pair<String, String> serialized)
throws ClassNotFoundException {
- Class<? extends NativeProvider> aClass =
- Class.forName(serialized.second).asSubclass(NativeProvider.class);
+ Class<? extends NativeProvider<?>> aClass =
+ (Class<? extends NativeProvider<?>>)
+ Class.forName(serialized.second).asSubclass(NativeProvider.class);
return new NativeKey(serialized.first, aClass);
}
@@ -182,12 +188,14 @@ public abstract class NativeProvider<V extends Info> extends Provider {
*
* <p>Just a wrapper around its class.
*/
+ @AutoCodec
@Immutable
public static final class NativeKey extends Key {
private final String name;
- private final Class<? extends NativeProvider> aClass;
+ private final Class<? extends NativeProvider<?>> aClass;
- private NativeKey(String name, Class<? extends NativeProvider> aClass) {
+ @VisibleForSerialization
+ NativeKey(String name, Class<? extends NativeProvider<?>> aClass) {
this.name = name;
this.aClass = aClass;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index d591aa2dc1..41558655f3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -27,6 +27,8 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
+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.skylarkinterface.SkylarkPrinter;
import com.google.devtools.build.lib.syntax.ClassObject;
import com.google.devtools.build.lib.syntax.EvalException;
@@ -39,6 +41,7 @@ import javax.annotation.Nullable;
*
* <p>Transitive info providers can also be overridden.
*/
+@AutoCodec
@Immutable
public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObject {
private final Label label;
@@ -51,10 +54,24 @@ public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObjec
RuleContext ruleContext,
ConfiguredTarget actual,
ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> overrides) {
- this.label = ruleContext.getLabel();
- this.configuration = Preconditions.checkNotNull(ruleContext.getConfiguration());
- this.actual = Preconditions.checkNotNull(actual);
- this.overrides = Preconditions.checkNotNull(overrides);
+ this(
+ ruleContext.getLabel(),
+ Preconditions.checkNotNull(ruleContext.getConfiguration()),
+ Preconditions.checkNotNull(actual),
+ Preconditions.checkNotNull(overrides));
+ }
+
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ AliasConfiguredTarget(
+ Label label,
+ BuildConfiguration configuration,
+ ConfiguredTarget actual,
+ ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> overrides) {
+ this.label = label;
+ this.configuration = configuration;
+ this.actual = actual;
+ this.overrides = overrides;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
index 731357c4cd..a842b86be9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
@@ -47,15 +47,17 @@ public final class CcLinkParams {
/**
* A list of link options contributed by a single configured target.
*
- * <b>WARNING:</b> Do not implement {@code #equals()} in the obvious way. This class must be
+ * <p><b>WARNING:</b> Do not implement {@code #equals()} in the obvious way. This class must be
* checked for equality by object identity because otherwise if two configured targets contribute
* the same link options, they will be de-duplicated, which is not the desirable behavior.
*/
+ @AutoCodec
@Immutable
public static final class LinkOptions {
private final ImmutableList<String> linkOptions;
- private LinkOptions(Iterable<String> linkOptions) {
+ @VisibleForSerialization
+ LinkOptions(Iterable<String> linkOptions) {
this.linkOptions = ImmutableList.copyOf(linkOptions);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
index 4c327cb993..95a5a9436a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
@@ -19,6 +19,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.skylark.SkylarkApiProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -36,6 +37,7 @@ import com.google.devtools.build.lib.vfs.PathFragment;
+ "Every C++-related target provides this struct, accessible as a <code>cc</code> field "
+ "on <a href=\"Target.html\">target</a>."
)
+@AutoCodec
public final class CcSkylarkApiProvider extends SkylarkApiProvider {
/** The name of the field in Skylark used to access this class. */
public static final String NAME = "cc";
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
index fc4ebd6727..341da8a6ec 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
@@ -16,9 +16,11 @@ package com.google.devtools.build.lib.skyframe;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.ActionLookupValue;
import com.google.devtools.build.lib.actions.Actions.GeneratingActions;
+import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
@@ -26,18 +28,18 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.packages.Package;
+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.skyframe.SkyKey;
import java.util.List;
import javax.annotation.Nullable;
-/**
- * A configured target in the context of a Skyframe graph.
- */
+/** A configured target in the context of a Skyframe graph. */
+@AutoCodec
@Immutable
@ThreadSafe
@VisibleForTesting
public final class ConfiguredTargetValue extends ActionLookupValue {
-
// These variables are only non-final because they may be clear()ed to save memory.
// configuredTarget is null only after it is cleared.
@Nullable private ConfiguredTarget configuredTarget;
@@ -45,6 +47,18 @@ public final class ConfiguredTargetValue extends ActionLookupValue {
// May be null either after clearing or because transitive packages are not tracked.
@Nullable private NestedSet<Package> transitivePackagesForPackageRootResolution;
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ ConfiguredTargetValue(
+ List<ActionAnalysisMetadata> actions,
+ ImmutableMap<Artifact, Integer> generatingActionIndex,
+ ConfiguredTarget configuredTarget,
+ NestedSet<Package> transitivePackagesForPackageRootResolution) {
+ super(actions, generatingActionIndex);
+ this.configuredTarget = configuredTarget;
+ this.transitivePackagesForPackageRootResolution = transitivePackagesForPackageRootResolution;
+ }
+
ConfiguredTargetValue(
ConfiguredTarget configuredTarget,
GeneratingActions generatingActions,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BooleanCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BooleanCodec.java
new file mode 100644
index 0000000000..c30b69d2ef
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BooleanCodec.java
@@ -0,0 +1,40 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.skyframe.serialization;
+
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
+import java.io.IOException;
+
+/** Codec for {@link Boolean}. */
+class BooleanCodec implements ObjectCodec<Boolean> {
+
+ @Override
+ public Class<Boolean> getEncodedClass() {
+ return Boolean.class;
+ }
+
+ @Override
+ public void serialize(SerializationContext context, Boolean value, CodedOutputStream codedOut)
+ throws IOException {
+ codedOut.writeBoolNoTag(value);
+ }
+
+ @Override
+ public Boolean deserialize(DeserializationContext context, CodedInputStream codedIn)
+ throws IOException {
+ return codedIn.readBool();
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/util/Pair.java b/src/main/java/com/google/devtools/build/lib/util/Pair.java
index 943f8c97f2..a4ac5b8d77 100644
--- a/src/main/java/com/google/devtools/build/lib/util/Pair.java
+++ b/src/main/java/com/google/devtools/build/lib/util/Pair.java
@@ -13,12 +13,12 @@
// limitations under the License.
package com.google.devtools.build.lib.util;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import java.util.Objects;
import javax.annotation.Nullable;
-/**
- * An immutable, semantic-free ordered pair of nullable values. Avoid using it in public APIs.
- */
+/** An immutable, semantic-free ordered pair of nullable values. Avoid using it in public APIs. */
+@AutoCodec
public final class Pair<A, B> {
/**