diff options
author | Googler <noreply@google.com> | 2016-06-30 15:26:23 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2016-07-01 07:09:30 +0000 |
commit | 7128b02078eab0904624c2f970adaa082eb08984 (patch) | |
tree | ae71256bba959735c09ec9b74358f38607fa1f3e /src/tools/android/java/com/google/devtools/build/android/AndroidDataWriter.java | |
parent | 7f60883548753a8c290ad484cf26605a61edaaea (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.java | 29 |
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; } |