diff options
author | 2016-07-14 22:31:34 +0000 | |
---|---|---|
committer | 2016-07-15 13:31:20 +0000 | |
commit | 937cb800767178b245587276d81d17b94384e44b (patch) | |
tree | b649d5082a07d34863c5d096c175eb501f62ec07 /src/main/java/com/google/devtools | |
parent | 3b25028750dd7a6df6777f6c70c1feae9063a630 (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.java | 101 | ||||
-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.java | 6 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java | 10 |
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 |