aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2017-08-17 17:49:50 +0200
committerGravatar Irina Iancu <elenairina@google.com>2017-08-18 09:01:03 +0200
commitb86f8b06f5f4832b51e3be0de9d32170a79371ee (patch)
tree154fe134c52fafccd35b7e086c7076666491901d /src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
parent7321812d556f659b65952d5205250230e19d76cb (diff)
Open-source Skyframe serialization, and make AppleConfiguration serializable as a pilot. Currently not hooked up to anything, but will be shortly.
PiperOrigin-RevId: 165583517
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java50
1 files changed, 48 insertions, 2 deletions
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 bdbc910905..5fbbef561c 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
@@ -26,10 +26,14 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.annotation.Nullable;
/**
* Represents a value with multiple components, separated by periods, for example {@code 4.5.6} or
@@ -249,13 +253,35 @@ public final class DottedVersion implements Comparable<DottedVersion>, SkylarkVa
printer.append(stringRepresentation);
}
+ void serialize(CodedOutputStream out) throws IOException {
+ out.writeInt32NoTag(components.size());
+ for (Component component : components) {
+ component.serialize(out);
+ }
+ out.writeStringNoTag(stringRepresentation);
+ out.writeInt32NoTag(numOriginalComponents);
+ }
+
+ static DottedVersion deserialize(CodedInputStream in) throws IOException {
+ int numComponents = in.readInt32();
+ // TODO(janakr: Presize this if/when https://github.com/google/guava/issues/196 is resolved.
+ ImmutableList.Builder<Component> components = ImmutableList.builder();
+ for (int i = 0; i < numComponents; i++) {
+ components.add(Component.deserialize(in));
+ }
+ return new DottedVersion(components.build(), in.readString(), in.readInt32());
+ }
+
private static final class Component implements Comparable<Component> {
private final int firstNumber;
- private final String alphaSequence;
+ @Nullable private final String alphaSequence;
private final int secondNumber;
private final String stringRepresentation;
- public Component(int firstNumber, String alphaSequence, int secondNumber,
+ public Component(
+ int firstNumber,
+ @Nullable String alphaSequence,
+ int secondNumber,
String stringRepresentation) {
this.firstNumber = firstNumber;
this.alphaSequence = alphaSequence;
@@ -293,5 +319,25 @@ public final class DottedVersion implements Comparable<DottedVersion>, SkylarkVa
public String toString() {
return stringRepresentation;
}
+
+ void serialize(CodedOutputStream out) throws IOException {
+ if (alphaSequence == null) {
+ out.writeBoolNoTag(false);
+ } else {
+ out.writeBoolNoTag(true);
+ out.writeStringNoTag(alphaSequence);
+ }
+ out.writeInt32NoTag(firstNumber);
+ out.writeInt32NoTag(secondNumber);
+ out.writeStringNoTag(stringRepresentation);
+ }
+
+ static Component deserialize(CodedInputStream in) throws IOException {
+ String alphaSequence = null;
+ if (in.readBool()) {
+ alphaSequence = in.readString();
+ }
+ return new Component(in.readInt32(), alphaSequence, in.readInt32(), in.readString());
+ }
}
}