diff options
author | 2017-12-27 12:10:20 -0800 | |
---|---|---|
committer | 2017-12-27 12:11:51 -0800 | |
commit | c13b2ad87917251856db135314f03806c32aaae0 (patch) | |
tree | 7b4cf262bcfaebbe84c4cb7396ec403e21d02da6 /src/main/java/com/google/devtools/build/lib/analysis/config | |
parent | 11bcd246bc56f5f0dfc3f9b95af42b5cfc94c575 (diff) |
Adds ObjectCodecs for FragmentOptions and BuildOptions.
PiperOrigin-RevId: 180211710
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/config')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java | 35 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java | 8 |
2 files changed, 40 insertions, 3 deletions
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 024c33748a..b1944f05a6 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 @@ -22,12 +22,17 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedMap; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.common.options.InvocationPolicyEnforcer; import com.google.devtools.common.options.OptionsBase; import com.google.devtools.common.options.OptionsClassProvider; import com.google.devtools.common.options.OptionsParser; import com.google.devtools.common.options.OptionsParsingException; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.IOException; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; @@ -44,6 +49,8 @@ import javax.annotation.Nullable; * Stores the command-line options from a set of configuration fragments. */ public final class BuildOptions implements Cloneable, Serializable { + public static final ObjectCodec<BuildOptions> CODEC = new BuildOptionsCodec(); + private static final Comparator<Class<? extends FragmentOptions>> lexicalFragmentOptionsComparator = Comparator.comparing(Class::getName); @@ -322,4 +329,32 @@ public final class BuildOptions implements Cloneable, Serializable { builderMap = new HashMap<>(); } } + + private static class BuildOptionsCodec implements ObjectCodec<BuildOptions> { + @Override + public Class<BuildOptions> getEncodedClass() { + return BuildOptions.class; + } + + @Override + public void serialize(BuildOptions buildOptions, CodedOutputStream codedOut) + throws IOException, SerializationException { + Collection<FragmentOptions> fragmentOptions = buildOptions.getOptions(); + codedOut.writeInt32NoTag(fragmentOptions.size()); + for (FragmentOptions options : buildOptions.getOptions()) { + FragmentOptions.CODEC.serialize(options, codedOut); + } + } + + @Override + public BuildOptions deserialize(CodedInputStream codedIn) + throws IOException, SerializationException { + BuildOptions.Builder builder = BuildOptions.builder(); + int length = codedIn.readInt32(); + for (int i = 0; i < length; ++i) { + builder.add(FragmentOptions.CODEC.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 f6b2bca182..305a95ef23 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,16 +17,18 @@ 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; import java.util.Map; import java.util.Set; -/** - * Command-line build options for a Blaze module. - */ +/** Command-line build options for a Blaze module. */ +@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC) public abstract class FragmentOptions extends OptionsBase implements Cloneable, Serializable { + public static final ObjectCodec<FragmentOptions> CODEC = new FragmentOptions_AutoCodec(); /** * Returns the labels contributed to the defaults package by this fragment. |