diff options
author | 2016-07-12 00:23:31 +0000 | |
---|---|---|
committer | 2016-07-12 11:17:59 +0000 | |
commit | 522551715b7886a9f4ca8d58262106de6a213aff (patch) | |
tree | 6f7f10d9143e4176d68b55b0811264e3f7d5003e /src/tools/android | |
parent | 532c2f0c159b8b41cb5caddb550fae358c79a757 (diff) |
* Standardize attribute storage in the proto
* Add attributes to PluralXmlResourceValue
--
MOS_MIGRATED_REVID=127147486
Diffstat (limited to 'src/tools/android')
6 files changed, 41 insertions, 15 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java b/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java index 242a74b881..a72d0633c7 100644 --- a/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java +++ b/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java @@ -171,7 +171,7 @@ public class DataResourceXml implements DataResource { case ARRAY: return ArrayXmlResourceValue.parseArray(eventReader, start); case PLURALS: - return XmlResourceValues.parsePlurals(eventReader); + return XmlResourceValues.parsePlurals(eventReader, start); case ATTR: return XmlResourceValues.parseAttr(eventReader, start); case LAYOUT: diff --git a/src/tools/android/java/com/google/devtools/build/android/XmlResourceValues.java b/src/tools/android/java/com/google/devtools/build/android/XmlResourceValues.java index c154a196ff..411be94ba3 100644 --- a/src/tools/android/java/com/google/devtools/build/android/XmlResourceValues.java +++ b/src/tools/android/java/com/google/devtools/build/android/XmlResourceValues.java @@ -96,7 +96,8 @@ public class XmlResourceValues { return inputFactoryInstance; } - static XmlResourceValue parsePlurals(XMLEventReader eventReader) throws XMLStreamException { + static XmlResourceValue parsePlurals(XMLEventReader eventReader, StartElement start) + throws XMLStreamException { ImmutableMap.Builder<String, String> values = ImmutableMap.builder(); for (XMLEvent element = nextTag(eventReader); !isEndTag(element, TAG_PLURALS); @@ -112,7 +113,8 @@ public class XmlResourceValues { contents == null ? "" : contents); } } - return PluralXmlResourceValue.of(values.build()); + return PluralXmlResourceValue.createWithAttributesAndValues( + ImmutableMap.copyOf(parseTagAttributes(start)), values.build()); } static XmlResourceValue parseStyle(XMLEventReader eventReader, StartElement start) diff --git a/src/tools/android/java/com/google/devtools/build/android/proto/serialize_format.proto b/src/tools/android/java/com/google/devtools/build/android/proto/serialize_format.proto index e546aa0ad7..66f418ee90 100644 --- a/src/tools/android/java/com/google/devtools/build/android/proto/serialize_format.proto +++ b/src/tools/android/java/com/google/devtools/build/android/proto/serialize_format.proto @@ -75,4 +75,5 @@ message DataValueXml { optional string value = 5; optional string value_type = 6; repeated DataKey references = 7; + map<string, string> attribute = 8; } diff --git a/src/tools/android/java/com/google/devtools/build/android/xml/ArrayXmlResourceValue.java b/src/tools/android/java/com/google/devtools/build/android/xml/ArrayXmlResourceValue.java index 3819d86998..5c9d64b637 100644 --- a/src/tools/android/java/com/google/devtools/build/android/xml/ArrayXmlResourceValue.java +++ b/src/tools/android/java/com/google/devtools/build/android/xml/ArrayXmlResourceValue.java @@ -115,7 +115,7 @@ public class ArrayXmlResourceValue implements XmlResourceValue { return of( ArrayType.valueOf(proto.getValueType()), proto.getListValueList(), - ImmutableMap.copyOf(proto.getMappedStringValue())); + ImmutableMap.copyOf(proto.getAttribute())); } @Override @@ -147,7 +147,7 @@ public class ArrayXmlResourceValue implements XmlResourceValue { SerializeFormat.DataValueXml.newBuilder() .addAllListValue(values) .setType(SerializeFormat.DataValueXml.XmlType.ARRAY) - .putAllMappedStringValue(attributes) + .putAllAttribute(attributes) .setValueType(arrayType.toString()))); } diff --git a/src/tools/android/java/com/google/devtools/build/android/xml/PluralXmlResourceValue.java b/src/tools/android/java/com/google/devtools/build/android/xml/PluralXmlResourceValue.java index 64cc8e8c64..29b2a2608f 100644 --- a/src/tools/android/java/com/google/devtools/build/android/xml/PluralXmlResourceValue.java +++ b/src/tools/android/java/com/google/devtools/build/android/xml/PluralXmlResourceValue.java @@ -54,19 +54,36 @@ public class PluralXmlResourceValue implements XmlResourceValue { private final ImmutableMap<String, String> values; - private PluralXmlResourceValue(ImmutableMap<String, String> values) { + private final ImmutableMap<String, String> attributes; + + private PluralXmlResourceValue( + ImmutableMap<String, String> attributes, ImmutableMap<String, String> values) { + this.attributes = attributes; this.values = values; } - public static XmlResourceValue of(ImmutableMap<String, String> values) { - return new PluralXmlResourceValue(values); + public static XmlResourceValue createWithoutAttributes(ImmutableMap<String, String> values) { + return createWithAttributesAndValues(ImmutableMap.<String, String>of(), values); + } + + public static XmlResourceValue createWithAttributesAndValues( + ImmutableMap<String, String> attributes, ImmutableMap<String, String> values) { + return new PluralXmlResourceValue(attributes, values); } @Override public void write( FullyQualifiedName key, Path source, AndroidDataWritingVisitor mergedDataWriter) { + ValuesResourceDefinition definition = - mergedDataWriter.define(key).derivedFrom(source).startTag(PLURALS).named(key).closeTag(); + mergedDataWriter + .define(key) + .derivedFrom(source) + .startTag(PLURALS) + .named(key) + .addAttributesFrom(attributes.entrySet()) + .closeTag(); + for (Entry<String, String> plural : values.entrySet()) { definition = definition @@ -83,7 +100,7 @@ public class PluralXmlResourceValue implements XmlResourceValue { @Override public int hashCode() { - return values.hashCode(); + return Objects.hash(attributes, values); } @Override @@ -92,17 +109,22 @@ public class PluralXmlResourceValue implements XmlResourceValue { return false; } PluralXmlResourceValue other = (PluralXmlResourceValue) obj; - return Objects.equals(values, other.values); + return Objects.equals(values, other.values) && Objects.equals(attributes, other.attributes); } @Override public String toString() { - return MoreObjects.toStringHelper(getClass()).add("values", values).toString(); + return MoreObjects.toStringHelper(getClass()) + .add("values", values) + .add("attributes", attributes) + .toString(); } @SuppressWarnings("deprecation") public static XmlResourceValue from(SerializeFormat.DataValueXml proto) { - return of(ImmutableMap.copyOf(proto.getMappedStringValue())); + return createWithAttributesAndValues( + ImmutableMap.copyOf(proto.getAttribute()), + ImmutableMap.copyOf(proto.getMappedStringValue())); } @Override @@ -115,6 +137,7 @@ public class PluralXmlResourceValue implements XmlResourceValue { builder .getXmlValueBuilder() .setType(XmlType.PLURAL) + .putAllAttribute(attributes) .putAllMappedStringValue(values)) .build(); value.writeDelimitedTo(output); diff --git a/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java b/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java index 7feb695fc4..3e308a1fab 100644 --- a/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java +++ b/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java @@ -209,7 +209,7 @@ public class SimpleXmlResourceValue implements XmlResourceValue { public static XmlResourceValue from(SerializeFormat.DataValueXml proto) { return of( Type.valueOf(proto.getValueType()), - ImmutableMap.copyOf(proto.getMappedStringValue()), + ImmutableMap.copyOf(proto.getAttribute()), proto.hasValue() ? proto.getValue() : null); } @@ -223,7 +223,7 @@ public class SimpleXmlResourceValue implements XmlResourceValue { .setType(SerializeFormat.DataValueXml.XmlType.SIMPLE) // TODO(corysmith): Find a way to avoid writing strings to the serialized format // it's inefficient use of space and costs more when deserializing. - .putAllMappedStringValue(attributes); + .putAllAttribute(attributes); if (value != null) { xmlValueBuilder.setValue(value); } |