aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Michajlo Matijkiw <michajlo@google.com>2016-07-14 22:31:34 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-07-15 13:31:20 +0000
commit937cb800767178b245587276d81d17b94384e44b (patch)
treeb649d5082a07d34863c5d096c175eb501f62ec07 /src/main/java/com/google/devtools
parent3b25028750dd7a6df6777f6c70c1feae9063a630 (diff)
Remove not-quite necessary serialization bits
What we really are doing here is formatting. -- MOS_MIGRATED_REVID=127481183
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AttributeFormatter.java (renamed from src/main/java/com/google/devtools/build/lib/packages/AttributeSerializer.java)4
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/ProtoUtils.java101
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleFormatter.java (renamed from src/main/java/com/google/devtools/build/lib/packages/RuleSerializer.java)4
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java10
6 files changed, 21 insertions, 108 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeSerializer.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeFormatter.java
index 8487ec3133..54a223fbe8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeSerializer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeFormatter.java
@@ -61,7 +61,7 @@ import java.util.Map.Entry;
import javax.annotation.Nullable;
/** Common utilities for serializing {@link Attribute}s as protocol buffers. */
-public class AttributeSerializer {
+public class AttributeFormatter {
private static final ImmutableSet<Type<?>> depTypes =
ImmutableSet.<Type<?>>of(
@@ -70,7 +70,7 @@ public class AttributeSerializer {
private static final ImmutableSet<Type<?>> noDepTypes =
ImmutableSet.<Type<?>>of(NODEP_LABEL_LIST, NODEP_LABEL);
- private AttributeSerializer() {}
+ private AttributeFormatter() {}
/**
* Convert attribute value to proto representation.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ProtoUtils.java b/src/main/java/com/google/devtools/build/lib/packages/ProtoUtils.java
index ceb0c8b1cb..c34ad2e224 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ProtoUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ProtoUtils.java
@@ -34,31 +34,16 @@ import static com.google.devtools.build.lib.syntax.Type.STRING_DICT_UNARY;
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST_DICT;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSetMultimap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
-import com.google.devtools.build.lib.query2.proto.proto2api.Build;
import com.google.devtools.build.lib.query2.proto.proto2api.Build.Attribute.Discriminator;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Preconditions;
-import java.util.Set;
-
-/**
- * Shared code used in proto buffer output for rules and rule classes.
- */
+/** Shared code used in proto buffer output for rules and rule classes. */
public class ProtoUtils {
/**
* This map contains all attribute types that are recognized by the protocol
* output formatter.
- *
- * <p>If you modify this map, please ensure that {@link #getTypeFromDiscriminator} can still
- * resolve a {@link Discriminator} value to exactly one {@link Type} (using an optional nodep
- * hint, as described below).
*/
static final ImmutableMap<Type<?>, Discriminator> TYPE_MAP =
new ImmutableMap.Builder<Type<?>, Discriminator>()
@@ -85,90 +70,8 @@ public class ProtoUtils {
.put(STRING_DICT_UNARY, Discriminator.STRING_DICT_UNARY)
.build();
- static final ImmutableSet<Type<?>> NODEP_TYPES = ImmutableSet.of(NODEP_LABEL, NODEP_LABEL_LIST);
-
- static final ImmutableSetMultimap<Discriminator, Type<?>> INVERSE_TYPE_MAP =
- TYPE_MAP.asMultimap().inverse();
-
/** Returns the {@link Discriminator} value corresponding to the provided {@link Type}. */
public static Discriminator getDiscriminatorFromType(Type<?> type) {
- Preconditions.checkArgument(TYPE_MAP.containsKey(type), type);
- return TYPE_MAP.get(type);
- }
-
- /** Returns the {@link Type} associated with an {@link Build.Attribute}. */
- static Type<?> getTypeFromAttributePb(
- Build.Attribute attrPb, String ruleClassName, String attrName) {
- Optional<Boolean> nodepHint =
- attrPb.hasNodep() ? Optional.of(attrPb.getNodep()) : Optional.<Boolean>absent();
- Discriminator attrPbDiscriminator = attrPb.getType();
- boolean isSelectorList = attrPbDiscriminator.equals(Discriminator.SELECTOR_LIST);
- return getTypeFromDiscriminator(
- isSelectorList ? attrPb.getSelectorList().getType() : attrPbDiscriminator,
- nodepHint,
- ruleClassName,
- attrName);
- }
-
- /**
- * Returns the set of {@link Type}s associated with a {@link Discriminator} value.
- *
- * <p>The set will contain more than one {@link Type} when {@param discriminator} is either
- * {@link Discriminator#STRING} or {@link Discriminator#STRING_LIST}, because each of them
- * corresponds with two {@link Type} values. A nodeps hint is needed to determine which {@link
- * Type} applies.
- */
- private static ImmutableSet<Type<?>> getTypesFromDiscriminator(Discriminator discriminator) {
- Preconditions.checkArgument(INVERSE_TYPE_MAP.containsKey(discriminator), discriminator);
- return INVERSE_TYPE_MAP.get(discriminator);
- }
-
- /**
- * Returns the {@link Type} associated with a {@link Discriminator} value, given an optional
- * nodeps hint.
- */
- private static Type<?> getTypeFromDiscriminator(
- Discriminator discriminator,
- Optional<Boolean> nodeps,
- String ruleClassName,
- String attrName) {
- Preconditions.checkArgument(INVERSE_TYPE_MAP.containsKey(discriminator), discriminator);
- ImmutableSet<Type<?>> possibleTypes = ProtoUtils.getTypesFromDiscriminator(discriminator);
- Type<?> preciseType;
- if (possibleTypes.size() == 1) {
- preciseType = Iterables.getOnlyElement(possibleTypes);
- } else {
- // If there is more than one possible type associated with the discriminator, then the
- // discriminator must be either Discriminator.STRING or Discriminator.STRING_LIST.
- //
- // If it is Discriminator.STRING, then its possible Type<?>s are {NODEP_LABEL, STRING}. The
- // nodeps hint must be present in order to distinguish between them. If nodeps is true,
- // then the Type<?> must be NODEP_LABEL, and if false, it must be STRING.
- //
- // A similar relation holds for the Discriminator value STRING_LIST, and its possible
- // Type<?>s {NODEP_LABEL_LIST, STRING_LIST}.
-
- Preconditions.checkArgument(nodeps.isPresent(),
- "Nodeps hint is required when discriminator is associated with more than one type."
- + " Discriminator: \"%s\", Rule class: \"%s\", Attr: \"%s\"", discriminator,
- ruleClassName, attrName);
- if (nodeps.get()) {
- Set<Type<?>> nodepType = Sets.filter(possibleTypes, Predicates.in(NODEP_TYPES));
- Preconditions.checkState(nodepType.size() == 1,
- "There should be exactly one NODEP type associated with discriminator \"%s\""
- + ", but found these: %s. Rule class: \"%s\", Attr: \"%s\"", discriminator,
- nodepType, ruleClassName, attrName);
- preciseType = Iterables.getOnlyElement(nodepType);
- } else {
- Set<Type<?>> notNodepType =
- Sets.filter(possibleTypes, Predicates.not(Predicates.in(NODEP_TYPES)));
- Preconditions.checkState(notNodepType.size() == 1,
- "There should be exactly one non-NODEP type associated with discriminator \"%s\""
- + ", but found these: %s. Rule class: \"%s\", Attr: \"%s\"", discriminator,
- notNodepType, ruleClassName, attrName);
- preciseType = Iterables.getOnlyElement(notNodepType);
- }
- }
- return preciseType;
+ return Preconditions.checkNotNull(TYPE_MAP.get(type), "No discriminator found for %s", type);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleSerializer.java b/src/main/java/com/google/devtools/build/lib/packages/RuleFormatter.java
index bfdc858319..4154818818 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleSerializer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleFormatter.java
@@ -19,7 +19,7 @@ import com.google.devtools.build.lib.query2.proto.proto2api.Build;
import com.google.devtools.build.lib.util.Preconditions;
/** Serialize a {@link Rule} as its protobuf representation. */
-public class RuleSerializer {
+public class RuleFormatter {
// Skylark doesn't support defining rule classes with ComputedDefault attributes. Therefore, the
// only ComputedDefault attributes we expect to see for Skylark-defined rule classes are
@@ -76,7 +76,7 @@ public class RuleSerializer {
}
builder.addAttribute(
- AttributeSerializer.getAttributeProto(
+ AttributeFormatter.getAttributeProto(
attr,
valueToSerialize,
isExplicit,
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java
index e51c6bf371..472ae201e6 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java
@@ -27,7 +27,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.graph.Digraph;
import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.Attribute;
-import com.google.devtools.build.lib.packages.AttributeSerializer;
+import com.google.devtools.build.lib.packages.AttributeFormatter;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.EnvironmentGroup;
import com.google.devtools.build.lib.packages.InputFile;
@@ -151,7 +151,7 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter {
AggregatingAttributeMapper.flattenAttributeValues(
attr.getType(), possibleAttributeValues);
Build.Attribute serializedAttribute =
- AttributeSerializer.getAttributeProto(
+ AttributeFormatter.getAttributeProto(
attr,
flattenedAttributeValue,
rule.isAttributeValueExplicitlySpecified(attr),
@@ -186,7 +186,7 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter {
}
Object attributeValue = getAspectAttributeValue(attribute, labels);
Build.Attribute serializedAttribute =
- AttributeSerializer.getAttributeProto(
+ AttributeFormatter.getAttributeProto(
attribute,
attributeValue,
/*explicitlySpecified=*/ false,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
index 8f15451230..f9ac1c1afe 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
@@ -20,7 +20,7 @@ import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.packages.RuleSerializer;
+import com.google.devtools.build.lib.packages.RuleFormatter;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
@@ -191,7 +191,7 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
private final byte[] computeRuleKey(Rule rule, byte[] ruleSpecificData) {
return new Fingerprint()
- .addBytes(RuleSerializer.serializeRule(rule).build().toByteArray())
+ .addBytes(RuleFormatter.serializeRule(rule).build().toByteArray())
.addBytes(ruleSpecificData)
// This is to make the fingerprint different after adding names to the generated
// WORKSPACE files so they will get re-created, because otherwise there are
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java
index 9d65922af2..b5b015243f 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java
@@ -28,6 +28,7 @@ import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.Arrays;
+import java.util.List;
import java.util.Set;
/**
@@ -90,6 +91,15 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl
return new PathFragment(driveLetter, isAbsolute, internedSegments);
}
+ /** Same as {@link #create(char, boolean, String[])}, except for {@link List}s of segments. */
+ public static PathFragment create(char driveLetter, boolean isAbsolute, List<String> segments) {
+ String[] internedSegments = new String[segments.size()];
+ for (int i = 0; i < segments.size(); i++) {
+ internedSegments[i] = StringCanonicalizer.intern(segments.get(i));
+ }
+ return new PathFragment(driveLetter, isAbsolute, internedSegments);
+ }
+
// We have 3 word-sized fields (segments, hashCode and path), and 2
// byte-sized ones, which fits in 16 bytes. Object sizes are rounded
// to 16 bytes. Medium sized builds can easily hold millions of