aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-06-30 15:26:23 +0000
committerGravatar Lukacs Berki <lberki@google.com>2016-07-01 07:09:30 +0000
commit7128b02078eab0904624c2f970adaa082eb08984 (patch)
treeae71256bba959735c09ec9b74358f38607fa1f3e /src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java
parent7f60883548753a8c290ad484cf26605a61edaaea (diff)
Fixes the case where an optional attribute needs to be an empty string. This is necessary for <style parent="">.
The previous code omitted empty strings to avoid the <attr format=""> case which is an error for aapt. -- MOS_MIGRATED_REVID=126305040
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java b/src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java
index 9193649d31..ab43942abd 100644
--- a/src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java
+++ b/src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java
@@ -16,7 +16,6 @@ package com.google.devtools.build.android;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Ordering;
@@ -44,6 +43,7 @@ import java.util.ArrayList;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -135,7 +135,11 @@ public class AndroidDataWriter implements AndroidDataWritingVisitor {
}
public static final char[] START_RESOURCES =
- ("<resources xmlns:xliff=\"" + XmlResourceValues.XLIFF_NAMESPACE + "\">").toCharArray();
+ ("<?xml version=\"1.0\" encoding='utf-8' standalone='no'?>\n"
+ + "<resources xmlns:xliff=\""
+ + XmlResourceValues.XLIFF_NAMESPACE
+ + "\">")
+ .toCharArray();
public static final char[] END_RESOURCES = "</resources>".toCharArray();
private static final char[] LINE_END = "\n".toCharArray();
private static final PngCruncher NOOP_CRUNCHER =
@@ -323,6 +327,7 @@ public class AndroidDataWriter implements AndroidDataWritingVisitor {
StandardOpenOption.CREATE_NEW,
StandardOpenOption.WRITE)) {
writer.write(START_RESOURCES);
+ writer.write(LINE_END);
Path previousSource = null;
for (FullyQualifiedName key :
Ordering.natural().immutableSortedCopy(segments.keySet())) {
@@ -392,11 +397,25 @@ public class AndroidDataWriter implements AndroidDataWritingVisitor {
@Override
public StartTag setTo(String value) {
- if (!(optional && Strings.isNullOrEmpty(value))) {
+ if (!optional || value != null) {
owner.attributes.add(" " + name + "=\"" + value + "\"");
}
return owner;
}
+
+ @Override
+ public ValueJoiner setFrom(final Iterable<String> values) {
+ return new ValueJoiner() {
+ @Override
+ public StartTag joinedBy(String separator) {
+ Iterator<String> valuesIterator = values.iterator();
+ if (!optional || valuesIterator.hasNext()) {
+ setTo(Joiner.on(separator).join(valuesIterator));
+ }
+ return owner;
+ }
+ };
+ }
}
/** Intermediate class that collects information for writing an xml start tag string. */
@@ -449,7 +468,7 @@ public class AndroidDataWriter implements AndroidDataWritingVisitor {
@Override
public ValuesResourceDefinition closeUnaryTag() {
- writer.mapper.add("<" + tagName + Joiner.on("").join(attributes) + "/>");
+ writer.mapper.add("\n<" + tagName + Joiner.on("").join(attributes) + "/>");
return writer;
}
@@ -521,6 +540,7 @@ public class AndroidDataWriter implements AndroidDataWritingVisitor {
@Override
public void save() {
Preconditions.checkArgument(tagStack.isEmpty(), "Unfinished tags %s", tagStack);
+ mapper.add("\n"); // Safe to add a line break to separate from other definitions.
mapper.finish();
}
@@ -629,7 +649,6 @@ public class AndroidDataWriter implements AndroidDataWritingVisitor {
public Path write(Path previousSource, Writer writer) throws IOException {
for (String line : lines) {
writer.write(line);
- writer.write(LINE_END);
}
return previousSource;
}