From b80158aca7f9cb99023e2f83effe2caefd0bb2d8 Mon Sep 17 00:00:00 2001 From: mjhalupka Date: Tue, 20 Feb 2018 09:45:07 -0800 Subject: Serialize MiddlemanAction and add strategy=Strategy.Polymorphic for Action and AbstractAction. PiperOrigin-RevId: 186316435 --- .../devtools/build/lib/actions/AbstractAction.java | 25 ++++++++++++------- .../google/devtools/build/lib/actions/Action.java | 6 +++++ .../com/google/devtools/build/lib/actions/BUILD | 1 + .../build/lib/actions/MiddlemanAction.java | 29 +++++++++++++++++----- 4 files changed, 46 insertions(+), 15 deletions(-) (limited to 'src/main/java/com') diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java index 5aba95bec6..4844dc9f52 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java @@ -29,6 +29,9 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.AspectDescriptor; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; @@ -53,19 +56,23 @@ import javax.annotation.concurrent.GuardedBy; /** * Abstract implementation of Action which implements basic functionality: the inputs, outputs, and - * toString method. Both input and output sets are immutable. Subclasses must be generally - * immutable - see the documentation on {@link Action}. + * toString method. Both input and output sets are immutable. Subclasses must be generally immutable + * - see the documentation on {@link Action}. */ -@Immutable @ThreadSafe +@Immutable +@ThreadSafe @SkylarkModule( - name = "Action", - category = SkylarkModuleCategory.BUILTIN, - doc = "An action created on a ctx object. You can retrieve these " - + "using the Actions provider. Some fields are only " - + "applicable for certain kinds of actions. Fields that are inapplicable are set to " - + "None." + name = "Action", + category = SkylarkModuleCategory.BUILTIN, + doc = + "An action created on a ctx object. You can retrieve these " + + "using the Actions provider. Some fields are only " + + "applicable for certain kinds of actions. Fields that are inapplicable are set to " + + "None." ) +@AutoCodec(strategy = Strategy.POLYMORPHIC) public abstract class AbstractAction implements Action, SkylarkValue { + public static final ObjectCodec CODEC = new AbstractAction_AutoCodec(); /** * An arbitrary default resource set. Currently 250MB of memory, 50% CPU and 0% of total I/O. diff --git a/src/main/java/com/google/devtools/build/lib/actions/Action.java b/src/main/java/com/google/devtools/build/lib/actions/Action.java index 217ce5d59d..54f562a332 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/Action.java +++ b/src/main/java/com/google/devtools/build/lib/actions/Action.java @@ -17,6 +17,9 @@ package com.google.devtools.build.lib.actions; import com.google.devtools.build.lib.actions.extra.ExtraActionInfo; import com.google.devtools.build.lib.concurrent.ThreadSafety.ConditionallyThreadCompatible; import com.google.devtools.build.lib.profiler.Describable; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.skyframe.SkyFunction; @@ -36,6 +39,7 @@ import javax.annotation.Nullable; * a new custom subclass. * *

These are the most important requirements for subclasses: + * *