diff options
author | Googler <noreply@google.com> | 2017-12-27 10:11:54 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-27 10:14:01 -0800 |
commit | 4af309d4b24f65994481203211c6ea7bec388bed (patch) | |
tree | f1a4691b13b8d856a9367f128e767d612a1f98da | |
parent | 4b6f10cfff8ab99a17fe5de79966248c3ccf1806 (diff) |
ObjectCodecs for all non-test FragmentOption subclasses.
PiperOrigin-RevId: 180202221
26 files changed, 211 insertions, 105 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 56f749eefa..58b1c92e4c 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -576,6 +576,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/rules/genrule", "//src/main/java/com/google/devtools/build/lib/rules/objc", "//src/main/java/com/google/devtools/build/lib/rules/platform", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", @@ -750,6 +752,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", "//third_party:auto_value", @@ -909,6 +913,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/shell", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", "//src/main/protobuf:extra_actions_base_java_proto", @@ -980,6 +986,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/config", "//src/main/java/com/google/devtools/build/lib/rules/cpp", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", "//src/main/protobuf:android_deploy_info_java_proto", @@ -1007,6 +1015,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/cpp", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", "//src/main/protobuf:crosstool_config_java_proto", diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java index 445f8e7684..9ae6e2d765 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java @@ -22,16 +22,24 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelListConverter; import com.google.devtools.build.lib.analysis.config.FragmentOptions; 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.SerializationException; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.common.options.Converter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.OptionMetadataTag; import com.google.devtools.common.options.OptionsParsingException; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.IOException; import java.util.List; /** Command-line options for platform-related configuration. */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class PlatformOptions extends FragmentOptions { + public static final ObjectCodec<PlatformOptions> CODEC = new PlatformOptions_AutoCodec(); @Option( name = "host_platform", @@ -121,6 +129,9 @@ public class PlatformOptions extends FragmentOptions { /** Data about which toolchain instance should be used for a given toolchain type. */ @AutoValue public abstract static class ToolchainResolutionOverride { + public static final ObjectCodec<ToolchainResolutionOverride> CODEC = + new ToolchainResolutionOverrideCodec(); + public abstract Label toolchainType(); public abstract Label toolchainLabel(); @@ -129,6 +140,28 @@ public class PlatformOptions extends FragmentOptions { return new AutoValue_PlatformOptions_ToolchainResolutionOverride( toolchainType, toolchainLabel); } + + private static class ToolchainResolutionOverrideCodec + implements ObjectCodec<ToolchainResolutionOverride> { + @Override + public Class<ToolchainResolutionOverride> getEncodedClass() { + return ToolchainResolutionOverride.class; + } + + @Override + public void serialize(ToolchainResolutionOverride obj, CodedOutputStream codedOut) + throws SerializationException, IOException { + Label.CODEC.serialize(obj.toolchainType(), codedOut); + Label.CODEC.serialize(obj.toolchainLabel(), codedOut); + } + + @Override + public ToolchainResolutionOverride deserialize(CodedInputStream codedIn) + throws SerializationException, IOException { + return ToolchainResolutionOverride.create( + Label.CODEC.deserialize(codedIn), Label.CODEC.deserialize(codedIn)); + } + } } /** 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 785a54e88c..f41ff41836 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 @@ -50,6 +50,8 @@ import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.lib.packages.Target; +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.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -430,18 +432,21 @@ public class BuildConfiguration implements BuildEvent { /** * Options that affect the value of a BuildConfiguration instance. * - * <p>(Note: any client that creates a view will also need to declare - * BuildView.Options, which affect the <i>mechanism</i> of view construction, - * even if they don't affect the value of the BuildConfiguration instances.) + * <p>(Note: any client that creates a view will also need to declare BuildView.Options, which + * affect the <i>mechanism</i> of view construction, even if they don't affect the value of the + * BuildConfiguration instances.) * - * <p>IMPORTANT: when adding new options, be sure to consider whether those - * values should be propagated to the host configuration or not. + * <p>IMPORTANT: when adding new options, be sure to consider whether those values should be + * propagated to the host configuration or not. * - * <p>ALSO IMPORTANT: all option types MUST define a toString method that - * gives identical results for semantically identical option values. The - * simplest way to ensure that is to return the input string. + * <p>ALSO IMPORTANT: all option types MUST define a toString method that gives identical results + * for semantically identical option values. The simplest way to ensure that is to return the + * input string. */ + @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static class Options extends FragmentOptions implements Cloneable { + public static final ObjectCodec<Options> CODEC = new BuildConfiguration_Options_AutoCodec(); + @Option( name = "experimental_separate_genfiles_directory", defaultValue = "true", diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java index a2f2daaef7..f23c0c37ec 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java @@ -17,21 +17,24 @@ package com.google.devtools.build.lib.analysis.config; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; 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.util.RegexFilter; import com.google.devtools.build.lib.util.RegexFilter.RegexFilterConverter; import com.google.devtools.common.options.Converter; import com.google.devtools.common.options.OptionsParsingException; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** - * Models options that can be added to a command line when a label matches a - * given {@link RegexFilter}. + * Models options that can be added to a command line when a label matches a given {@link + * RegexFilter}. */ +@AutoCodec public class PerLabelOptions implements Serializable { + public static final ObjectCodec<PerLabelOptions> CODEC = new PerLabelOptions_AutoCodec(); /** The filter used to match labels */ private final RegexFilter regexFilter; @@ -76,9 +79,9 @@ public class PerLabelOptions implements Serializable { } } - public PerLabelOptions(RegexFilter regexFilter, List<String> optionsList) { + public PerLabelOptions(RegexFilter regexFilter, List<String> options) { this.regexFilter = regexFilter; - this.optionsList = optionsList; + this.optionsList = options; } /** 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 4b9230cdd6..349c62b910 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,14 +14,16 @@ 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. - */ +/** 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/config/RunUnderConverter.java b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java index 5dc6a9164d..b55ac0ce59 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java @@ -17,9 +17,10 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.shell.ShellUtils; import com.google.devtools.build.lib.shell.ShellUtils.TokenizationException; +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.Converter; import com.google.devtools.common.options.OptionsParsingException; - import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -52,7 +53,11 @@ public class RunUnderConverter implements Converter<RunUnder> { } } - private static final class RunUnderLabel implements RunUnder { + @AutoCodec + static final class RunUnderLabel implements RunUnder { + public static final ObjectCodec<RunUnderLabel> CODEC = + new RunUnderConverter_RunUnderLabel_AutoCodec(); + private final String input; private final Label runUnderLabel; private final List<String> runUnderList; @@ -69,6 +74,18 @@ public class RunUnderConverter implements Converter<RunUnder> { @Override public List<String> getOptions() { return runUnderList; } @Override public String toString() { return input; } + String getInput() { + return input; + } + + Label getRunUnderLabel() { + return runUnderLabel; + } + + List<String> getRunUnderList() { + return runUnderList; + } + @Override public boolean equals(Object other) { if (this == other) { @@ -85,11 +102,15 @@ public class RunUnderConverter implements Converter<RunUnder> { @Override public int hashCode() { - return Objects.hash(input, runUnderLabel, runUnderList); + return Objects.hash(input, runUnderLabel, runUnderList); } } - private static final class RunUnderCommand implements RunUnder { + @AutoCodec + static final class RunUnderCommand implements RunUnder { + public static final ObjectCodec<RunUnderCommand> CODEC = + new RunUnderConverter_RunUnderCommand_AutoCodec(); + private final String input; private final String runUnderCommand; private final List<String> runUnderList; @@ -105,7 +126,18 @@ public class RunUnderConverter implements Converter<RunUnder> { @Override public String getCommand() { return runUnderCommand; } @Override public List<String> getOptions() { return runUnderList; } @Override public String toString() { return input; } - + + String getInput() { + return input; + } + + String getRunUnderCommand() { + return runUnderCommand; + } + + List<String> getRunUnderList() { + return runUnderList; + } @Override public boolean equals(Object other) { @@ -123,7 +155,7 @@ public class RunUnderConverter implements Converter<RunUnder> { @Override public int hashCode() { - return Objects.hash(input, runUnderCommand, runUnderList); + return Objects.hash(input, runUnderCommand, runUnderList); } } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java index 12b3d51b32..241008e57d 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java @@ -28,6 +28,8 @@ import com.google.devtools.build.lib.analysis.config.PerLabelOptions; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; +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.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; @@ -38,7 +40,11 @@ import java.util.List; public class TestConfiguration extends Fragment { /** Command-line options. */ + @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static class TestOptions extends FragmentOptions { + public static final ObjectCodec<TestOptions> CODEC = + new TestConfiguration_TestOptions_AutoCodec(); + @Option( name = "test_filter", allowMultiple = false, diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java index f1a7a1f992..a2191eda26 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java @@ -24,6 +24,8 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactor import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; 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.util.OS; import com.google.devtools.build.lib.util.OptionsUtils.PathFragmentConverter; import com.google.devtools.build.lib.vfs.PathFragment; @@ -39,7 +41,10 @@ import javax.annotation.Nullable; @Immutable public class BazelConfiguration extends Fragment { /** Command-line options. */ + @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static class Options extends FragmentOptions { + public static final ObjectCodec<Options> CODEC = new BazelConfiguration_Options_AutoCodec(); + @Option( name = "experimental_strict_action_env", defaultValue = "false", diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java index 5c504b8477..0cb066377b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java @@ -25,6 +25,8 @@ import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.cmdline.Label; 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.util.OS; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.common.options.Converter; @@ -57,10 +59,12 @@ public class BazelPythonConfiguration extends BuildConfiguration.Fragment { } } - /** - * Bazel-specific Python configuration options. - */ + /** Bazel-specific Python configuration options. */ + @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static final class Options extends FragmentOptions { + public static final ObjectCodec<Options> CODEC = + new BazelPythonConfiguration_Options_AutoCodec(); + @Option( name = "python2_path", defaultValue = "python", diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index 368ccc22e0..b7db181779 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java @@ -38,6 +38,8 @@ import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode; import com.google.devtools.build.lib.rules.cpp.CppOptions.DynamicModeConverter; import com.google.devtools.build.lib.rules.cpp.CppOptions.LibcTopLabelConverter; +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.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.common.options.Converters; @@ -227,7 +229,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { } /** Android configuration options. */ + @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static class Options extends FragmentOptions { + public static final ObjectCodec<Options> CODEC = new AndroidConfiguration_Options_AutoCodec(); + @Option( name = "Android configuration distinguisher", defaultValue = "MAIN", diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java index b4af907ed4..9c25a94e13 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java @@ -35,6 +35,8 @@ import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.RuleErrorConsumer; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; +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.common.options.EnumConverter; import com.google.devtools.common.options.OptionsParsingException; @@ -55,10 +57,14 @@ import javax.annotation.Nullable; * and {@link #hashCode()} methods. Failure to do so isn't just bad practice; it could seriously * interfere with Bazel's caching performance. */ +@AutoCodec public class ResourceFilterFactory { public static final String RESOURCE_CONFIGURATION_FILTERS_NAME = "resource_configuration_filters"; public static final String DENSITIES_NAME = "densities"; + public static final ObjectCodec<ResourceFilterFactory> CODEC = + new ResourceFilterFactory_AutoCodec(); + /** * Locales used for pseudolocation. * @@ -125,7 +131,6 @@ public class ResourceFilterFactory { * @param densities the density filters, as a list of strings. * @param filterBehavior the behavior of this filter. */ - @VisibleForTesting ResourceFilterFactory( ImmutableList<String> configFilters, ImmutableList<String> densities, @@ -657,6 +662,10 @@ public class ResourceFilterFactory { return Joiner.on(',').join(configFilters); } + ImmutableList<String> getConfigFilters() { + return configFilters; + } + /** * Returns if this object contains a non-empty density filter. * @@ -671,7 +680,7 @@ public class ResourceFilterFactory { return Joiner.on(',').join(densities); } - List<String> getDensities() { + ImmutableList<String> getDensities() { return densities; } @@ -683,6 +692,10 @@ public class ResourceFilterFactory { return hasConfigurationFilters() || hasDensities(); } + FilterBehavior getFilterBehavior() { + return filterBehavior; + } + public String getOutputDirectorySuffix() { if (!hasFilters()) { return null; diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java index fbc5363f7b..3bf0afc5a4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java @@ -14,10 +14,6 @@ package com.google.devtools.build.lib.rules.apple; -import static com.google.devtools.build.lib.skyframe.serialization.SerializationCommonUtils.STRING_LIST_CODEC; -import static com.google.devtools.build.lib.skyframe.serialization.SerializationCommonUtils.deserializeNullable; -import static com.google.devtools.build.lib.skyframe.serialization.SerializationCommonUtils.serializeNullable; - import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; @@ -25,13 +21,13 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.DefaultL import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter; import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.cmdline.LabelCodec; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher; import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType; import com.google.devtools.build.lib.skyframe.serialization.EnumCodec; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; -import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; @@ -48,7 +44,10 @@ import java.io.IOException; import java.util.List; /** Command-line options for building for Apple platforms. */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class AppleCommandLineOptions extends FragmentOptions { + public static final ObjectCodec<AppleCommandLineOptions> CODEC = + new AppleCommandLineOptions_AutoCodec(); @Option( name = "experimental_apple_mandatory_minimum_version", @@ -510,62 +509,12 @@ public class AppleCommandLineOptions extends FragmentOptions { } void serialize(CodedOutputStream out) throws IOException, SerializationException { - out.writeBoolNoTag(mandatoryMinimumVersion); - out.writeBoolNoTag(objcProviderFromLinked); - serializeNullable(xcodeVersion, out, StringCodecs.asciiOptimized()); - serializeNullable(iosSdkVersion, out, DottedVersion.CODEC); - serializeNullable(watchOsSdkVersion, out, DottedVersion.CODEC); - serializeNullable(tvOsSdkVersion, out, DottedVersion.CODEC); - serializeNullable(macOsSdkVersion, out, DottedVersion.CODEC); - serializeNullable(iosMinimumOs, out, DottedVersion.CODEC); - serializeNullable(watchosMinimumOs, out, DottedVersion.CODEC); - serializeNullable(tvosMinimumOs, out, DottedVersion.CODEC); - serializeNullable(macosMinimumOs, out, DottedVersion.CODEC); - StringCodecs.asciiOptimized().serialize(iosCpu, out); - LabelCodec.INSTANCE.serialize(appleCrosstoolTop, out); - PlatformType.CODEC.serialize(applePlatformType, out); - StringCodecs.asciiOptimized().serialize(appleSplitCpu, out); - ConfigurationDistinguisher.CODEC.serialize(configurationDistinguisher, out); - STRING_LIST_CODEC.serialize((ImmutableList<String>) iosMultiCpus, out); - STRING_LIST_CODEC.serialize((ImmutableList<String>) watchosCpus, out); - STRING_LIST_CODEC.serialize((ImmutableList<String>) tvosCpus, out); - STRING_LIST_CODEC.serialize((ImmutableList<String>) macosCpus, out); - LabelCodec.INSTANCE.serialize(defaultProvisioningProfile, out); - LabelCodec.INSTANCE.serialize(xcodeVersionConfig, out); - AppleBitcodeMode.CODEC.serialize(appleBitcodeMode, out); - out.writeBoolNoTag(enableAppleCrosstoolTransition); - out.writeBoolNoTag(targetUsesAppleCrosstool); + CODEC.serialize(this, out); } static AppleCommandLineOptions deserialize(CodedInputStream in) throws IOException, SerializationException { - AppleCommandLineOptions result = new AppleCommandLineOptions(); - result.mandatoryMinimumVersion = in.readBool(); - result.objcProviderFromLinked = in.readBool(); - result.xcodeVersion = deserializeNullable(in, StringCodecs.asciiOptimized()); - result.iosSdkVersion = deserializeNullable(in, DottedVersion.CODEC); - result.watchOsSdkVersion = deserializeNullable(in, DottedVersion.CODEC); - result.tvOsSdkVersion = deserializeNullable(in, DottedVersion.CODEC); - result.macOsSdkVersion = deserializeNullable(in, DottedVersion.CODEC); - result.iosMinimumOs = deserializeNullable(in, DottedVersion.CODEC); - result.watchosMinimumOs = deserializeNullable(in, DottedVersion.CODEC); - result.tvosMinimumOs = deserializeNullable(in, DottedVersion.CODEC); - result.macosMinimumOs = deserializeNullable(in, DottedVersion.CODEC); - result.iosCpu = StringCodecs.asciiOptimized().deserialize(in); - result.appleCrosstoolTop = LabelCodec.INSTANCE.deserialize(in); - result.applePlatformType = PlatformType.CODEC.deserialize(in); - result.appleSplitCpu = StringCodecs.asciiOptimized().deserialize(in); - result.configurationDistinguisher = ConfigurationDistinguisher.CODEC.deserialize(in); - result.iosMultiCpus = STRING_LIST_CODEC.deserialize(in); - result.watchosCpus = STRING_LIST_CODEC.deserialize(in); - result.tvosCpus = STRING_LIST_CODEC.deserialize(in); - result.macosCpus = STRING_LIST_CODEC.deserialize(in); - result.defaultProvisioningProfile = LabelCodec.INSTANCE.deserialize(in); - result.xcodeVersionConfig = LabelCodec.INSTANCE.deserialize(in); - result.appleBitcodeMode = AppleBitcodeMode.CODEC.deserialize(in); - result.enableAppleCrosstoolTransition = in.readBool(); - result.targetUsesAppleCrosstool = in.readBool(); - return result; + return CODEC.deserialize(in); } /** Converter for the Apple configuration distinguisher. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD b/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD index ebe3e34fdc..a40e8f8ad9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD @@ -21,6 +21,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/common/options", "//third_party:guava", "//third_party:jsr305", diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java index dbe80f1568..569c8e1c4a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java @@ -257,7 +257,7 @@ public final class DottedVersion implements Comparable<DottedVersion>, SkylarkVa printer.append(stringRepresentation); } - static final ObjectCodec<DottedVersion> CODEC = + public static final ObjectCodec<DottedVersion> CODEC = new ObjectCodec<DottedVersion>() { @Override public void serialize(DottedVersion obj, CodedOutputStream codedOut) throws IOException { diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD index 924c9731dc..746789603a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD @@ -15,6 +15,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib:build-base", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/common/options", "//third_party:guava", ], diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java index 9803e22a5e..505838754d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java @@ -15,13 +15,18 @@ package com.google.devtools.build.lib.rules.apple.swift; import com.google.devtools.build.lib.analysis.config.FragmentOptions; +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.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; import java.util.List; /** Command-line options for building with Swift tools. */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class SwiftCommandLineOptions extends FragmentOptions { + public static final ObjectCodec<SwiftCommandLineOptions> CODEC = + new SwiftCommandLineOptions_AutoCodec(); @Option( name = "swiftcopt", diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD index ca6c17a8d5..b67256c354 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD @@ -28,6 +28,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/common/options", "//third_party:guava", "//third_party:jsr305", diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java index be93cb9353..7ce92f0d1c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java @@ -25,6 +25,8 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment; import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory; import com.google.devtools.build.lib.analysis.config.FragmentOptions; 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.Converter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; @@ -56,7 +58,11 @@ public final class ConfigFeatureFlagConfiguration extends BuildConfiguration.Fra } /** The options fragment which defines {@link ConfigFeatureFlagConfiguration}. */ + @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static final class Options extends FragmentOptions { + public static final ObjectCodec<Options> CODEC = + new ConfigFeatureFlagConfiguration_Options_AutoCodec(); + /** The mapping from config_feature_flag rules to their values. */ @Option( name = "config_feature_flag values (private)", diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD index 03e0ecf016..ac0ced43a0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -30,6 +30,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/profiler", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//src/main/java/com/google/devtools/build/lib/shell", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java index 2649e2091d..3d2a242318 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java @@ -25,6 +25,8 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.StripMode; +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.util.OS; import com.google.devtools.build.lib.util.OptionsUtils; import com.google.devtools.build.lib.vfs.PathFragment; @@ -42,10 +44,10 @@ import java.util.Map; import java.util.Set; import javax.annotation.Nullable; -/** - * Command-line options for C++. - */ +/** Command-line options for C++. */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class CppOptions extends FragmentOptions { + public static final ObjectCodec<CppOptions> CODEC = new CppOptions_AutoCodec(); /** * Converts a comma-separated list of compilation mode settings to a properly typed List. diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java index fe72380895..1389262719 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java @@ -25,6 +25,8 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode; 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.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.common.options.EnumConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; @@ -36,10 +38,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -/** - * Command-line options for building Java targets - */ +/** Command-line options for building Java targets */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class JavaOptions extends FragmentOptions { + public static final ObjectCodec<JavaOptions> CODEC = new JavaOptions_AutoCodec(); /** Converter for the --java_classpath option. */ public static class JavaClasspathModeConverter extends EnumConverter<JavaClasspathMode> { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD index 54e49204ef..c9022b5d3f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD @@ -31,6 +31,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/rules/config", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/shell", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", "//src/main/protobuf:bundlemerge_java_proto", diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java index f6af056f0d..ba28c3657e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java @@ -17,6 +17,8 @@ package com.google.devtools.build.lib.rules.objc; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter; import com.google.devtools.build.lib.analysis.config.FragmentOptions; 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.Converters; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; @@ -24,11 +26,14 @@ import com.google.devtools.common.options.OptionEffectTag; import java.util.List; /** - * Command-line options for J2ObjC translation of Java source code to ObjC. - * These command line options are used by Java rules that can be transpiled - * (specifically, J2ObjCAspects thereof). + * Command-line options for J2ObjC translation of Java source code to ObjC. These command line + * options are used by Java rules that can be transpiled (specifically, J2ObjCAspects thereof). */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class J2ObjcCommandLineOptions extends FragmentOptions { + public static final ObjectCodec<J2ObjcCommandLineOptions> CODEC = + new J2ObjcCommandLineOptions_AutoCodec(); + @Option( name = "j2objc_translation_flags", converter = Converters.CommaSeparatedOptionListConverter.class, diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java index dafd67586f..64637c39d8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java @@ -19,6 +19,8 @@ import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.rules.apple.DottedVersionConverter; +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.Converters.CommaSeparatedOptionListConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; @@ -26,10 +28,12 @@ import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.OptionMetadataTag; import java.util.List; -/** - * Command-line options for building Objective-C targets. - */ +/** Command-line options for building Objective-C targets. */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class ObjcCommandLineOptions extends FragmentOptions { + public static final ObjectCodec<ObjcCommandLineOptions> CODEC = + new ObjcCommandLineOptions_AutoCodec(); + @Option( name = "ios_simulator_version", defaultValue = "9.3", diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java index 9df88d3f05..feb0706fe6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java @@ -26,6 +26,8 @@ import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.cmdline.Label; 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.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.common.options.Converters; @@ -48,10 +50,11 @@ import java.util.List; ) public class ProtoConfiguration extends Fragment { - /** - * Command line options. - */ + /** Command line options. */ + @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static class Options extends FragmentOptions { + public static final ObjectCodec<Options> CODEC = new ProtoConfiguration_Options_AutoCodec(); + @Option( name = "protocopt", allowMultiple = true, diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java index 776704b246..b730513300 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java @@ -14,16 +14,19 @@ package com.google.devtools.build.lib.rules.python; import com.google.devtools.build.lib.analysis.config.FragmentOptions; +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.EnumConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.TriState; -/** - * Python-related command-line options. - */ +/** Python-related command-line options. */ +@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public class PythonOptions extends FragmentOptions { + public static final ObjectCodec<PythonOptions> CODEC = new PythonOptions_AutoCodec(); + /** * Converter for the --force_python option. */ |