From 569e169a5d015ed7d9840ed904f39c4ac7a43503 Mon Sep 17 00:00:00 2001 From: shahan Date: Tue, 20 Feb 2018 16:06:00 -0800 Subject: Deletes POLYMORPHIC strategy. ObjectCodec now uses runtime type information to select a codec. PiperOrigin-RevId: 186378153 --- .../devtools/build/lib/actions/AbstractAction.java | 6 - .../google/devtools/build/lib/actions/Action.java | 6 - .../build/lib/actions/ActionLookupValue.java | 7 -- .../devtools/build/lib/actions/ArtifactOwner.java | 4 - .../lib/actions/BuildConfigurationInterface.java | 4 - .../devtools/build/lib/actions/CommandLine.java | 4 - .../build/lib/analysis/LicensesProvider.java | 4 - .../devtools/build/lib/analysis/Runfiles.java | 2 - .../build/lib/analysis/VisibilityProvider.java | 6 - .../lib/analysis/config/BuildConfiguration.java | 7 +- .../build/lib/analysis/config/BuildOptions.java | 4 +- .../build/lib/analysis/config/FragmentOptions.java | 5 - .../build/lib/analysis/config/RunUnder.java | 5 - .../lib/analysis/skylark/SkylarkApiProvider.java | 3 - .../analysis/test/InstrumentedFilesProvider.java | 6 - .../google/devtools/build/lib/events/Location.java | 11 +- .../devtools/build/lib/packages/AspectClass.java | 5 - .../build/lib/packages/PackageSpecification.java | 5 - .../lib/rules/cpp/AspectLegalCppSemantics.java | 5 - .../build/lib/rules/cpp/CcLinkParamsStore.java | 4 - .../build/lib/rules/cpp/CcToolchainFeatures.java | 11 -- .../devtools/build/lib/rules/cpp/CppSemantics.java | 7 +- .../build/lib/rules/cpp/ExtraLinkTimeLibrary.java | 6 - .../build/lib/rules/cpp/IncludeProcessing.java | 6 - .../build/lib/rules/cpp/IncludeScannable.java | 6 - .../devtools/build/lib/rules/cpp/LinkerInput.java | 6 - .../devtools/build/lib/rules/cpp/LinkerInputs.java | 5 - .../build/lib/rules/java/JavaSemantics.java | 5 - .../build/lib/skyframe/WorkspaceStatusValue.java | 9 +- .../skyframe/serialization/PolymorphicHelper.java | 139 --------------------- .../serialization/autocodec/AutoCodec.java | 10 -- .../autocodec/AutoCodecProcessor.java | 34 ----- .../devtools/build/lib/syntax/SkylarkImport.java | 8 +- 33 files changed, 12 insertions(+), 343 deletions(-) delete mode 100644 src/main/java/com/google/devtools/build/lib/skyframe/serialization/PolymorphicHelper.java (limited to 'src/main') 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 " + "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 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 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 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 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 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 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 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 CODEC = new Runfiles_EmptyFilesSupplier_AutoCodec(); /** Calculate additional empty files to add based on the existing manifest paths. */ Iterable getExtraPaths(Set 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 CODEC = new VisibilityProvider_AutoCodec(); - /** Returns the visibility specification. */ NestedSet 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 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, 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 = 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 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 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 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 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 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 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; *

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 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 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. * } * */ -@AutoCodec(strategy = Strategy.POLYMORPHIC) public abstract class CcLinkParamsStore { - public static final ObjectCodec 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 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 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 { *

Implementations must be immutable and without any side-effects. They will be expanded and * queried multiple times. */ - @AutoCodec(strategy = Strategy.POLYMORPHIC) interface VariableValue { - ObjectCodec 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 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. *

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 CODEC = new ExtraLinkTimeLibrary_AutoCodec(); - /** Build the LibraryToLink inputs to pass to the C++ linker. */ NestedSet 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 CODEC = new IncludeProcessing_AutoCodec(); - /** Performs include processing actions and returns the processed set of resulting headers. */ Iterable 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; *

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 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 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 CODEC = - new LinkerInputs_LibraryToLink_AutoCodec(); - ImmutableMap 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 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 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 @@ -61,16 +61,6 @@ public @interface AutoCodec { * instance for deserialization. */ PUBLIC_FIELDS, - /** - * For use with abstract classes (enforced at compile time). - * - *

Uses reflection to determine the concrete subclass, stores the name of the subclass and - * uses its codec to serialize the data. - * - *

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. * 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 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(); } - -- cgit v1.2.3