aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-02-20 16:06:00 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-20 16:08:28 -0800
commit569e169a5d015ed7d9840ed904f39c4ac7a43503 (patch)
tree92cb77e75472aed646b0fb50a79664931ac1c395
parent7b1b4a41dbfbf34a8e077590612cf5fe3aaaa987 (diff)
Deletes POLYMORPHIC strategy. ObjectCodec now uses runtime type information to select a codec.
PiperOrigin-RevId: 186378153
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Action.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ArtifactOwner.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/CommandLine.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/RunUnder.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkApiProvider.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/events/Location.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectClass.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/AspectLegalCppSemantics.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/PolymorphicHelper.java139
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkImport.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/events/LocationTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/LexerTest.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkImportsTest.java7
37 files changed, 24 insertions, 360 deletions
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 4844dc9f52..6b9d374f0f 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,9 +29,6 @@ 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;
@@ -70,10 +67,7 @@ import javax.annotation.concurrent.GuardedBy;
+ "applicable for certain kinds of actions. Fields that are inapplicable are set to "
+ "<code>None</code>."
)
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public abstract class AbstractAction implements Action, SkylarkValue {
- public static final ObjectCodec<AbstractAction> 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 54f562a332..0111313e4f 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,9 +17,6 @@ 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;
@@ -79,10 +76,7 @@ import javax.annotation.Nullable;
* known set of fields is covered, not that all fields are covered), so carefully check all changes
* to action subclasses.
*/
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface Action extends ActionExecutionMetadata, Describable {
- public static final ObjectCodec<Action> CODEC = new Action_AutoCodec();
-
/**
* Prepares for executing this action; called by the Builder prior to executing the Action itself.
* This method should prepare the file system, so that the execution of the Action can write the
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 33555a20c7..8ed14d198b 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
@@ -23,9 +23,6 @@ import com.google.common.collect.Maps;
import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
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.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.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.ArrayList;
@@ -191,11 +188,7 @@ public class ActionLookupValue implements SkyValue {
* subclasses of ActionLookupKey. This allows callers to easily find the value key, while
* remaining agnostic to what ActionLookupValues actually exist.
*/
- @AutoCodec(strategy = Strategy.POLYMORPHIC)
public abstract static class ActionLookupKey implements ArtifactOwner, SkyKey {
- public static final ObjectCodec<ActionLookupKey> CODEC =
- new ActionLookupValue_ActionLookupKey_AutoCodec();
-
@Override
public Label getLabel() {
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactOwner.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactOwner.java
index 27b97a4521..36f7b24936 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactOwner.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactOwner.java
@@ -15,7 +15,6 @@ package com.google.devtools.build.lib.actions;
import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
/**
@@ -23,10 +22,7 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
* internal {@link Artifact}-generators should implement this interface -- otherwise, {@code
* ActionLookupKey} and its subclasses should be the only implementation.
*/
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface ArtifactOwner {
- ObjectCodec<ArtifactOwner> CODEC = new ArtifactOwner_AutoCodec();
-
Label getLabel();
/**
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java
index 4e9a079879..f033754d30 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java
@@ -15,15 +15,11 @@
package com.google.devtools.build.lib.actions;
import com.google.devtools.build.lib.buildeventstream.BuildEvent;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
/**
* An interface for {@code BuildConfiguration} that only exists so that {@link ActionOwner} can
* refer to {@code BuildConfiguration}, which is in a dependent package. {@code BuildConfiguration}
* must be the only implementation of this interface.
*/
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface BuildConfigurationInterface extends BuildEvent {
- ObjectCodec<BuildConfigurationInterface> CODEC = new BuildConfigurationInterface_AutoCodec();
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java b/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java
index f14af972df..558644be51 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java
@@ -21,15 +21,11 @@ import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
import com.google.devtools.build.lib.collect.CollectionUtils;
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.util.Fingerprint;
/** A representation of a list of arguments. */
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public abstract class CommandLine {
- public static final ObjectCodec<CommandLine> CODEC = new CommandLine_AutoCodec();
-
@AutoCodec
@VisibleForSerialization
static class EmptyCommandLine extends CommandLine {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java
index e6cb1bf3ec..57272bda9f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java
@@ -21,14 +21,10 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.packages.License;
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 java.util.Objects;
/** A {@link ConfiguredTarget} that has licensed targets in its transitive closure. */
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface LicensesProvider extends TransitiveInfoProvider {
- ObjectCodec<LicensesProvider> CODEC = new LicensesProvider_AutoCodec();
-
/**
* The set of label - license associations in the transitive closure.
*
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index 3e4011dbfb..933a1a8939 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -230,9 +230,7 @@ public final class Runfiles {
* Interface used for adding empty files to the runfiles at the last minute. Mainly to support
* python-related rules adding __init__.py files.
*/
- @AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface EmptyFilesSupplier {
- ObjectCodec<EmptyFilesSupplier> CODEC = new Runfiles_EmptyFilesSupplier_AutoCodec();
/** Calculate additional empty files to add based on the existing manifest paths. */
Iterable<PathFragment> getExtraPaths(Set<PathFragment> manifestPaths);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java
index baa069003d..7bf46dcd8f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java
@@ -16,15 +16,9 @@ package com.google.devtools.build.lib.analysis;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
-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;
/** Provider class for configured targets that have a visibility. */
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface VisibilityProvider extends TransitiveInfoProvider {
- ObjectCodec<VisibilityProvider> CODEC = new VisibilityProvider_AutoCodec();
-
/** Returns the visibility specification. */
NestedSet<PackageGroupContents> getVisibility();
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index 3f2a463c43..3bec3daa6b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -139,10 +139,7 @@ public class BuildConfiguration implements BuildConfigurationInterface {
* declare {@link ImmutableList} signatures on their interfaces vs. {@link List}). This is because
* fragment instances may be shared across configurations.
*/
- @AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public abstract static class Fragment {
- public static final ObjectCodec<Fragment> CODEC = new BuildConfiguration_Fragment_AutoCodec();
-
/**
* Validates the options for this Fragment. Issues warnings for the
* use of deprecated options, and warnings or errors for any option settings
@@ -2146,7 +2143,7 @@ public class BuildConfiguration implements BuildConfigurationInterface {
BlazeDirectories.CODEC.serialize(context, obj.directories, codedOut);
codedOut.writeInt32NoTag(obj.fragments.size());
for (Fragment fragment : obj.fragments.values()) {
- Fragment.CODEC.serialize(context, fragment, codedOut);
+ context.serialize(fragment, codedOut);
}
BuildOptions.CODEC.serialize(context, obj.buildOptions, codedOut);
StringCodecs.asciiOptimized().serialize(context, obj.repositoryName, codedOut);
@@ -2160,7 +2157,7 @@ public class BuildConfiguration implements BuildConfigurationInterface {
ImmutableSortedMap.Builder<Class<? extends Fragment>, Fragment> builder =
new ImmutableSortedMap.Builder<>(lexicalFragmentSorter);
for (int i = 0; i < length; ++i) {
- Fragment fragment = Fragment.CODEC.deserialize(context, codedIn);
+ Fragment fragment = context.deserialize(codedIn);
builder.put(fragment.getClass(), fragment);
}
BuildOptions options = BuildOptions.CODEC.deserialize(context, codedIn);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
index 4a89121dd5..cd1db7c261 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
@@ -345,7 +345,7 @@ public final class BuildOptions implements Cloneable, Serializable {
Collection<FragmentOptions> fragmentOptions = buildOptions.getOptions();
codedOut.writeInt32NoTag(fragmentOptions.size());
for (FragmentOptions options : buildOptions.getOptions()) {
- FragmentOptions.CODEC.serialize(context, options, codedOut);
+ context.serialize(options, codedOut);
}
}
@@ -355,7 +355,7 @@ public final class BuildOptions implements Cloneable, Serializable {
BuildOptions.Builder builder = BuildOptions.builder();
int length = codedIn.readInt32();
for (int i = 0; i < length; ++i) {
- builder.add(FragmentOptions.CODEC.deserialize(context, codedIn));
+ builder.add(context.deserialize(codedIn));
}
return builder.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
index 305a95ef23..abf15c5081 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
@@ -17,8 +17,6 @@ package com.google.devtools.build.lib.analysis.config;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.common.options.Options;
import com.google.devtools.common.options.OptionsBase;
import java.io.Serializable;
@@ -26,10 +24,7 @@ import java.util.Map;
import java.util.Set;
/** Command-line build options for a Blaze module. */
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public abstract class FragmentOptions extends OptionsBase implements Cloneable, Serializable {
- public static final ObjectCodec<FragmentOptions> CODEC = new FragmentOptions_AutoCodec();
-
/**
* Returns the labels contributed to the defaults package by this fragment.
*
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnder.java b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnder.java
index 349c62b910..5848f5b9e9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnder.java
@@ -14,16 +14,11 @@
package com.google.devtools.build.lib.analysis.config;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import java.io.Serializable;
import java.util.List;
/** Components of --run_under option. */
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface RunUnder extends Serializable {
- public static final ObjectCodec<RunUnder> CODEC = new RunUnder_AutoCodec();
-
/**
* @return the whole value passed to --run_under option.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkApiProvider.java
index 3c60f8e00f..d0f401798b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkApiProvider.java
@@ -16,14 +16,11 @@ package com.google.devtools.build.lib.analysis.skylark;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
/**
* An abstract class for adding a Skylark API for the native providers. Derived classes should
* declare functions to be used from Skylark.
*/
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public abstract class SkylarkApiProvider {
private TransitiveInfoCollection info;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java
index 8ef3e5b9a4..4fdc499e0d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java
@@ -17,16 +17,10 @@ package com.google.devtools.build.lib.analysis.test;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-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.util.Pair;
/** A provider of instrumented file sources and instrumentation metadata. */
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface InstrumentedFilesProvider extends TransitiveInfoProvider {
- ObjectCodec<InstrumentedFilesProvider> CODEC = new InstrumentedFilesProvider_AutoCodec();
-
/**
* The transitive closure of instrumented source files.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/events/Location.java b/src/main/java/com/google/devtools/build/lib/events/Location.java
index 412d601a2d..e6cc8de13b 100644
--- a/src/main/java/com/google/devtools/build/lib/events/Location.java
+++ b/src/main/java/com/google/devtools/build/lib/events/Location.java
@@ -16,7 +16,6 @@ package com.google.devtools.build.lib.events;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.SingletonCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -33,10 +32,7 @@ import java.util.Objects;
* attribute access, as far more Locations are created during parsing than are ever used to display
* error messages.
*/
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public abstract class Location implements Serializable {
- public static final ObjectCodec<Location> CODEC = new Location_AutoCodec();
-
@AutoCodec
@Immutable
static final class LocationWithPathAndStartColumn extends Location {
@@ -302,12 +298,11 @@ public abstract class Location implements Serializable {
}
}
- private static final class BuiltinLocation extends Location {
+ @AutoCodec(strategy = AutoCodec.Strategy.SINGLETON)
+ @AutoCodec.VisibleForSerialization
+ static final class BuiltinLocation extends Location {
public static final BuiltinLocation INSTANCE = new BuiltinLocation();
- public static final ObjectCodec<BuiltinLocation> CODEC =
- SingletonCodec.of(INSTANCE, "BuiltinLocation");
-
private BuiltinLocation() {
super(0, 0);
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
index 66d661aabf..723736e9a7 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.packages;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
/**
* A class of aspects.
@@ -92,10 +90,7 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
* @see com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory
* @see com.google.devtools.build.lib.skyframe.AspectFunction
*/
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface AspectClass {
- ObjectCodec<AspectClass> CODEC = new AspectClass_AutoCodec();
-
/**
* Returns an aspect name.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java b/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
index 2212224a28..f01efeb8b0 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
@@ -22,7 +22,6 @@ import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
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.vfs.PathFragment;
import java.util.stream.Stream;
@@ -43,11 +42,7 @@ import java.util.stream.Stream;
* <p>A package specification is specific to a single {@link RepositoryName} unless it is the "all
* packages" specification.
*/
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public abstract class PackageSpecification {
- public static final ObjectCodec<PackageSpecification> CODEC =
- new PackageSpecification_AutoCodec();
-
private static final String PACKAGE_LABEL = "__pkg__";
private static final String SUBTREE_LABEL = "__subpackages__";
private static final String ALL_BENEATH_SUFFIX = "/...";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/AspectLegalCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/AspectLegalCppSemantics.java
index 19296b8ca8..073d256f41 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/AspectLegalCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/AspectLegalCppSemantics.java
@@ -14,16 +14,11 @@
package com.google.devtools.build.lib.rules.cpp;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
/**
* A marker for {@link CppSemantics} implementations that are legal as members of an aspect. These
* implementations must not be heavy to serialize (e.g. a singleton is fine), so as not to weigh
* down AspectKey.
*/
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface AspectLegalCppSemantics extends CppSemantics {
- public static final ObjectCodec<AspectLegalCppSemantics> CODEC =
- new AspectLegalCppSemantics_AutoCodec();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
index 71f9464ee6..760b4cb5a0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
@@ -18,7 +18,6 @@ import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Builder;
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;
/**
@@ -47,10 +46,7 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.
* }
* </pre>
*/
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public abstract class CcLinkParamsStore {
- public static final ObjectCodec<CcLinkParamsStore> CODEC = new CcLinkParamsStore_AutoCodec();
-
private CcLinkParams staticSharedParams;
private CcLinkParams staticNoSharedParams;
private CcLinkParams noStaticSharedParams;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 281f2d0af8..5664286168 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -40,7 +40,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
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.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -118,9 +117,7 @@ public class CcToolchainFeatures implements Serializable {
* %{var1}/%{var2}"). We split the string into chunks, where each chunk represents either a text
* snippet, or a variable that is to be replaced.
*/
- @AutoCodec(strategy = Strategy.POLYMORPHIC)
interface StringChunk {
- ObjectCodec<StringChunk> CODEC = new CcToolchainFeatures_StringChunk_AutoCodec();
/**
* Expands this chunk.
*
@@ -331,11 +328,7 @@ public class CcToolchainFeatures implements Serializable {
}
/** A flag or flag group that can be expanded under a set of variables. */
- @AutoCodec(strategy = Strategy.POLYMORPHIC)
interface Expandable {
-
- ObjectCodec<Expandable> CODEC = new CcToolchainFeatures_Expandable_AutoCodec();
-
/**
* Expands the current expandable under the given {@code view}, adding new flags to {@code
* commandLine}.
@@ -1207,11 +1200,7 @@ public class CcToolchainFeatures implements Serializable {
* <p>Implementations must be immutable and without any side-effects. They will be expanded and
* queried multiple times.
*/
- @AutoCodec(strategy = Strategy.POLYMORPHIC)
interface VariableValue {
- ObjectCodec<VariableValue> CODEC =
- new CcToolchainFeatures_Variables_VariableValue_AutoCodec();
-
/**
* Returns string value of the variable, if the variable type can be converted to string (e.g.
* StringValue), or throw exception if it cannot (e.g. Sequence).
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
index 98f3356cb7..614369fb91 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
@@ -18,14 +18,9 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
/** Pluggable C++ compilation semantics. */
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface CppSemantics {
- public static final ObjectCodec<CppSemantics> CODEC = new CppSemantics_AutoCodec();
-
/**
* Called before a C++ compile action is built.
*
@@ -61,7 +56,7 @@ public interface CppSemantics {
* in the action graph.
*/
boolean needsIncludeScanning(RuleContext ruleContext);
-
+
/** Returns true iff this build should perform .d input pruning. */
boolean needsDotdInputPruning();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java
index 7b7238d9bc..9c04dc9b47 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java
@@ -17,9 +17,6 @@ package com.google.devtools.build.lib.rules.cpp;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
-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;
/**
* An extra library to include in a link. The actual library is built at link time.
@@ -31,10 +28,7 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.
* <p>Any implementations must be immutable (and therefore thread-safe), because this is passed
* between rules and accessed in a multi-threaded context.
*/
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface ExtraLinkTimeLibrary {
- ObjectCodec<ExtraLinkTimeLibrary> CODEC = new ExtraLinkTimeLibrary_AutoCodec();
-
/** Build the LibraryToLink inputs to pass to the C++ linker. */
NestedSet<LibraryToLink> buildLibraries(RuleContext context) throws InterruptedException;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java
index 6bd958930b..e9721a5a3d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java
@@ -18,16 +18,10 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.rules.cpp.IncludeScanner.IncludeScannerSupplier;
-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 javax.annotation.Nullable;
/** Used as an interface to thin header inputs to compile actions for C++-like compiles. */
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface IncludeProcessing {
- ObjectCodec<IncludeProcessing> CODEC = new IncludeProcessing_AutoCodec();
-
/** Performs include processing actions and returns the processed set of resulting headers. */
Iterable<Artifact> determineAdditionalInputs(
@Nullable IncludeScannerSupplier includeScannerSupplier,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java
index 71c9ce406b..4c97495126 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java
@@ -16,9 +16,6 @@ package com.google.devtools.build.lib.rules.cpp;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-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.PathFragment;
import java.util.Collection;
import java.util.List;
@@ -32,10 +29,7 @@ import javax.annotation.Nullable;
* <p>This is useful for remote execution strategies to be able to compute the complete set of files
* that must be distributed in order to execute such an action.
*/
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface IncludeScannable {
- public static final ObjectCodec<IncludeScannable> CODEC = new IncludeScannable_AutoCodec();
-
/**
* Returns the built-in list of system include paths for the toolchain compiler. All paths in this
* list should be relative to the exec directory. They may be absolute if they are also installed
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java
index 818b9f94de..3b0c36116b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java
@@ -15,19 +15,13 @@
package com.google.devtools.build.lib.rules.cpp;
import com.google.devtools.build.lib.actions.Artifact;
-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;
/**
* Something that appears on the command line of the linker. Since we sometimes expand archive files
* to their constituent object files, we need to keep information whether a certain file contains
* embedded objects and if so, the list of the object files themselves.
*/
-@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface LinkerInput {
- ObjectCodec<LinkerInput> CODEC = new LinkerInput_AutoCodec();
-
/**
* Returns the type of the linker input.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
index 8432cdd30e..8625cf6cd9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
@@ -22,7 +22,6 @@ import com.google.devtools.build.lib.collect.CollectionUtils;
import com.google.devtools.build.lib.concurrent.ThreadSafety;
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;
/**
@@ -149,11 +148,7 @@ public abstract class LinkerInputs {
* A library the user can link to. This is different from a simple linker input in that it also
* has a library identifier.
*/
- @AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface LibraryToLink extends LinkerInput {
- public static final ObjectCodec<LibraryToLink> CODEC =
- new LinkerInputs_LibraryToLink_AutoCodec();
-
ImmutableMap<Artifact, Artifact> getLtoBitcodeFiles();
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
index a3a1e63647..aac466b2b7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
@@ -45,8 +45,6 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgs.ClasspathTyp
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaOptimizationMode;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.OneVersionEnforcementLevel;
import com.google.devtools.build.lib.rules.java.proto.GeneratedExtensionRegistryProvider;
-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.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -57,10 +55,7 @@ import java.util.stream.Collectors;
import javax.annotation.Nullable;
/** Pluggable Java compilation semantics. */
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface JavaSemantics {
- public static final ObjectCodec<JavaSemantics> CODEC = new JavaSemantics_AutoCodec();
-
LibraryLanguage LANGUAGE = new LibraryLanguage("Java");
SafeImplicitOutputsFunction JAVA_LIBRARY_CLASS_JAR =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
index be647065d4..777dcbab4a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
@@ -17,8 +17,7 @@ import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionLookupValue;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
-import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.SingletonCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
@@ -55,10 +54,9 @@ public class WorkspaceStatusValue extends ActionLookupValue {
}
/** {@link SkyKey} for {@link WorkspaceStatusValue}. */
+ @AutoCodec(strategy = AutoCodec.Strategy.SINGLETON)
public static class BuildInfoKey extends ActionLookupKey {
- private static final BuildInfoKey INSTANCE = new BuildInfoKey();
- public static final ObjectCodec<BuildInfoKey> CODEC =
- SingletonCodec.of(INSTANCE, "build_info_key");
+ @AutoCodec.VisibleForSerialization static final BuildInfoKey INSTANCE = new BuildInfoKey();
private BuildInfoKey() {}
@@ -66,6 +64,5 @@ public class WorkspaceStatusValue extends ActionLookupValue {
public SkyFunctionName functionName() {
return SkyFunctions.BUILD_INFO;
}
-
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PolymorphicHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PolymorphicHelper.java
deleted file mode 100644
index b199ca6ce1..0000000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PolymorphicHelper.java
+++ /dev/null
@@ -1,139 +0,0 @@
-// 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.devtools.build.lib.skyframe.serialization.strings.StringCodecs;
-import com.google.protobuf.CodedInputStream;
-import com.google.protobuf.CodedOutputStream;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.Optional;
-import javax.annotation.Nullable;
-
-/** Helper methods for polymorphic codecs using reflection. */
-public class PolymorphicHelper {
-
- private PolymorphicHelper() {}
-
- /**
- * Serializes a polymorphic type.
- *
- * @param dependency if null, it means that the parent, polymorphic type, provides no dependency.
- * It is valid for dependency to be non-null, with an enclosed null value. This means that
- * dependency itself is null (as opposed to non-existent).
- */
- @SuppressWarnings("unchecked")
- public static void serialize(
- SerializationContext context,
- Object input,
- Class<?> baseClass,
- CodedOutputStream codedOut,
- @Nullable Optional<?> dependency)
- throws IOException, SerializationException {
- if (input != null) {
- try {
- ClassAndCodec classAndCodec = getClassAndCodecInClassHierarchy(input, baseClass);
- Class<?> clazz = classAndCodec.clazz;
- Object codec = classAndCodec.codec;
- codedOut.writeBoolNoTag(true);
- StringCodecs.asciiOptimized().serialize(context, clazz.getName(), codedOut);
- if (codec instanceof ObjectCodec) {
- ((ObjectCodec) codec).serialize(context, input, codedOut);
- } else {
- throw new SerializationException(
- clazz.getCanonicalName()
- + ".CODEC has unexpected type "
- + codec.getClass().getCanonicalName());
- }
- } catch (ReflectiveOperationException e) {
- throw new SerializationException(input.getClass().getName(), e);
- }
- } else {
- codedOut.writeBoolNoTag(false);
- }
- }
-
- /**
- * Deserializes a polymorphic type.
- *
- * @param dependency if null, it means that the parent, polymorphic type, provides no dependency.
- * It is valid for dependency to be non-null, with an enclosed null value. This means the
- * dependency itself is null (as opposed to non-existent).
- */
- @SuppressWarnings("unchecked")
- public static Object deserialize(
- DeserializationContext context, CodedInputStream codedIn, @Nullable Optional<?> dependency)
- throws IOException, SerializationException {
- Object deserialized = null;
- if (codedIn.readBool()) {
- String className = StringCodecs.asciiOptimized().deserialize(context, codedIn);
- try {
- Object codec = getCodec(Class.forName(className));
- if (codec instanceof ObjectCodec) {
- return ((ObjectCodec) codec).deserialize(context, codedIn);
- } else {
- throw new SerializationException(
- className + ".CODEC has unexpected type " + codec.getClass().getCanonicalName());
- }
- } catch (ReflectiveOperationException e) {
- throw new SerializationException(className, e);
- }
- }
- return deserialized;
- }
-
- private static ClassAndCodec getClassAndCodecInClassHierarchy(Object input, Class<?> baseClass)
- throws SerializationException, IllegalAccessException {
- Class<?> clazz = input.getClass();
- Field codecField = null;
- while (!clazz.equals(baseClass)) {
- try {
- codecField = getCodecField(clazz);
- break;
- } catch (NoSuchFieldException e) {
- clazz = clazz.getSuperclass();
- }
- }
- if (clazz.equals(baseClass)) {
- throw new SerializationException("Could not find codec for " + input.getClass());
- }
- return new ClassAndCodec(clazz, getValueOfField(codecField));
- }
-
- private static Field getCodecField(Class<?> clazz) throws NoSuchFieldException {
- return clazz.getDeclaredField("CODEC");
- }
-
- private static Object getValueOfField(Field field) throws IllegalAccessException {
- field.setAccessible(true);
- return field.get(null);
- }
-
- /** Returns the static CODEC instance for {@code clazz}. */
- private static Object getCodec(Class<?> clazz)
- throws NoSuchFieldException, IllegalAccessException {
- return getValueOfField(getCodecField(clazz));
- }
-
- private static class ClassAndCodec {
- final Class<?> clazz;
- final Object codec;
-
- ClassAndCodec(Class<?> clazz, Object codec) {
- this.clazz = clazz;
- this.codec = codec;
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
index 0f597dbee1..cb88b0ae8e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
@@ -62,16 +62,6 @@ public @interface AutoCodec {
*/
PUBLIC_FIELDS,
/**
- * For use with abstract classes (enforced at compile time).
- *
- * <p>Uses reflection to determine the concrete subclass, stores the name of the subclass and
- * uses its codec to serialize the data.
- *
- * <p>This is no longer needed and only adds useless overhead.
- */
- // TODO(shahan): delete this and all references to it
- POLYMORPHIC,
- /**
* For use with classes that are singleton.
*
* <p>The serialized class must have a codec accessible, static INSTANCE field.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java
index c3d14df9f2..935e97383c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java
@@ -21,7 +21,6 @@ import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
-import com.google.devtools.build.lib.skyframe.serialization.PolymorphicHelper;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationCodeGenerator.Marshaller;
import com.squareup.javapoet.ClassName;
@@ -102,9 +101,6 @@ public class AutoCodecProcessor extends AbstractProcessor {
case PUBLIC_FIELDS:
codecClassBuilder = buildClassWithPublicFieldsStrategy(encodedType);
break;
- case POLYMORPHIC:
- codecClassBuilder = buildClassWithPolymorphicStrategy(encodedType);
- break;
case SINGLETON:
codecClassBuilder = buildClassWithSingletonStrategy(encodedType);
break;
@@ -536,36 +532,6 @@ public class AutoCodecProcessor extends AbstractProcessor {
return Optional.empty();
}
- private TypeSpec.Builder buildClassWithPolymorphicStrategy(TypeElement encodedType) {
- if (!encodedType.getModifiers().contains(Modifier.ABSTRACT)) {
- throw new IllegalArgumentException(
- encodedType + " is not abstract, but POLYMORPHIC was selected as the strategy.");
- }
- TypeSpec.Builder codecClassBuilder = AutoCodecUtil.initializeCodecClassBuilder(encodedType);
- codecClassBuilder.addMethod(buildPolymorphicSerializeMethod(encodedType));
- codecClassBuilder.addMethod(buildPolymorphicDeserializeMethod(encodedType));
- return codecClassBuilder;
- }
-
- private MethodSpec buildPolymorphicSerializeMethod(TypeElement encodedType) {
- MethodSpec.Builder builder = AutoCodecUtil.initializeSerializeMethodBuilder(encodedType);
- TypeName polyClass = TypeName.get(env.getTypeUtils().erasure(encodedType.asType()));
- builder.addStatement(
- "$T.serialize(context, input, $T.class, codedOut, null)",
- PolymorphicHelper.class,
- polyClass);
- return builder.build();
- }
-
- private static MethodSpec buildPolymorphicDeserializeMethod(TypeElement encodedType) {
- MethodSpec.Builder builder = AutoCodecUtil.initializeDeserializeMethodBuilder(encodedType);
- builder.addStatement(
- "return ($T) $T.deserialize(context, codedIn, null)",
- TypeName.get(encodedType.asType()),
- PolymorphicHelper.class);
- return builder.build();
- }
-
private static TypeSpec.Builder buildClassWithSingletonStrategy(TypeElement encodedType) {
TypeSpec.Builder codecClassBuilder = AutoCodecUtil.initializeCodecClassBuilder(encodedType);
// Serialization is a no-op.
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImport.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImport.java
index 469d7b597f..471fba4a34 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImport.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImport.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.syntax;
import com.google.devtools.build.lib.cmdline.Label;
-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.vfs.PathFragment;
import java.io.Serializable;
import javax.annotation.Nullable;
@@ -24,10 +22,7 @@ import javax.annotation.Nullable;
* Encapsulates the four syntactic variants of Skylark imports: Absolute paths, relative paths,
* absolute labels, and relative labels.
*/
-@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
public interface SkylarkImport extends Serializable {
- ObjectCodec<SkylarkImport> CODEC = new SkylarkImport_AutoCodec();
-
/**
* Returns the string originally used to specify the import (may represent a label or a path).
*/
@@ -58,9 +53,8 @@ public interface SkylarkImport extends Serializable {
/**
* Returns a {@link PathFragment} representing the import path.
- *
+ *
* @throws IllegalStateException if this import does not take the form of an absolute path.
*/
PathFragment getAbsolutePath();
}
-
diff --git a/src/test/java/com/google/devtools/build/lib/events/LocationTest.java b/src/test/java/com/google/devtools/build/lib/events/LocationTest.java
index 2b32a63024..17c95b0770 100644
--- a/src/test/java/com/google/devtools/build/lib/events/LocationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/events/LocationTest.java
@@ -15,7 +15,7 @@ package com.google.devtools.build.lib.events;
import static com.google.common.truth.Truth.assertThat;
-import com.google.devtools.build.lib.skyframe.serialization.testutils.ObjectCodecTester;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.vfs.PathFragment;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -57,11 +57,10 @@ public class LocationTest extends EventTestTemplate {
@Test
public void testCodec() throws Exception {
- ObjectCodecTester.newBuilder(Location.CODEC)
- .addSubjects(
+ new SerializationTester(
Location.fromPathFragment(path),
Location.fromPathAndStartColumn(path, 0, 100, new Location.LineAndColumn(20, 25)),
Location.BUILTIN)
- .buildAndRunTests();
+ .runTests();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index e63d1ea06e..ce60452770 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -65,7 +65,7 @@ import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAc
import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionCompletedReceiver;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ProgressSupplier;
-import com.google.devtools.build.lib.skyframe.serialization.SingletonCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
@@ -492,10 +492,9 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase {
}
}
- private static class SingletonActionLookupKey extends ActionLookupValue.ActionLookupKey {
-
- public static final SingletonCodec<SingletonActionLookupKey> CODEC =
- SingletonCodec.of(new SingletonActionLookupKey(), "none");
+ @AutoCodec(strategy = AutoCodec.Strategy.SINGLETON)
+ static class SingletonActionLookupKey extends ActionLookupValue.ActionLookupKey {
+ public static final SingletonActionLookupKey INSTANCE = new SingletonActionLookupKey();
@Override
public SkyFunctionName functionName() {
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/LexerTest.java b/src/test/java/com/google/devtools/build/lib/syntax/LexerTest.java
index c07d44b2d5..9d2df743b5 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/LexerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/LexerTest.java
@@ -21,7 +21,7 @@ import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.events.Reporter;
-import com.google.devtools.build.lib.skyframe.serialization.testutils.ObjectCodecTester;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.vfs.PathFragment;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -498,8 +498,6 @@ public class LexerTest {
@Test
public void testLexerLocationCodec() throws Exception {
- ObjectCodecTester.newBuilder(Location.CODEC)
- .addSubjects(createLexer("foo").createLocation(0, 2))
- .buildAndRunTests();
+ new SerializationTester(createLexer("foo").createLocation(0, 2)).runTests();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkImportsTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkImportsTest.java
index e3269f63b0..3488047237 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkImportsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkImportsTest.java
@@ -17,7 +17,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.hamcrest.CoreMatchers.startsWith;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.testutils.ObjectCodecTester;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.syntax.SkylarkImports.SkylarkImportSyntaxException;
import com.google.devtools.build.lib.vfs.PathFragment;
import org.junit.Rule;
@@ -232,12 +232,11 @@ public class SkylarkImportsTest {
@Test
public void serialization() throws Exception {
- ObjectCodecTester.newBuilder(SkylarkImport.CODEC)
- .addSubjects(
+ new SerializationTester(
SkylarkImports.create("//some/skylark:file.bzl"),
SkylarkImports.create("/some/skylark/file"),
SkylarkImports.create(":subdirectory/containing/file.bzl"),
SkylarkImports.create("file"))
- .buildAndRunTests();
+ .runTests();
}
}