aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/config
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-12-27 12:10:20 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-27 12:11:51 -0800
commitc13b2ad87917251856db135314f03806c32aaae0 (patch)
tree7b4cf262bcfaebbe84c4cb7396ec403e21d02da6 /src/main/java/com/google/devtools/build/lib/analysis/config
parent11bcd246bc56f5f0dfc3f9b95af42b5cfc94c575 (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.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java8
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.