diff options
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> { /** |