aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-05-21 16:19:56 +0000
committerGravatar Yue Gan <yueg@google.com>2016-05-23 08:25:15 +0000
commitc990a319b8ad0f43528f243e0b6b1b5a5815b0b0 (patch)
treed78a4d1ca74f108fc3e70813f59be79ff8746d0f /src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java
parent48dff6b80bf83253ad0b852929b57a986041c46e (diff)
*** Reason for rollback *** Rolling forward with api tolerance. *** Original change description *** Automated [] rollback of commit 941ef4d96d85e114eb6cca2fc0f646578ab0ef27. *** Reason for rollback *** Breaks Bazel due to internal patch for Round qualifier. *** Original change description *** * Adds handling for anydpi and watch, two unsupported qualifiers in FolderConfiguration. * Handles resources nested in directories. * Makes the resource processing resilient to invalid qualifiers. -- MOS_MIGRATED_REVID=122910358
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java b/src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java
index 0ec40d8aa3..4e78428b88 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java
+++ b/src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java
@@ -21,6 +21,7 @@ import com.google.common.collect.Iterables;
import com.google.devtools.build.android.xml.StyleableXmlResourceValue;
import com.android.ide.common.res2.MergingException;
+import com.android.resources.ResourceFolderType;
import java.io.IOException;
import java.nio.file.FileVisitOption;
@@ -37,6 +38,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
+import java.util.logging.Logger;
import javax.annotation.concurrent.Immutable;
import javax.annotation.concurrent.NotThreadSafe;
@@ -52,6 +54,7 @@ import javax.xml.stream.XMLStreamException;
*/
@Immutable
public class ParsedAndroidData {
+ private static final Logger logger = Logger.getLogger(ParsedAndroidData.class.getCanonicalName());
@NotThreadSafe
static class Builder {
@@ -242,7 +245,7 @@ public class ParsedAndroidData {
private final KeyValueConsumer<DataKey, DataResource> overwritingConsumer;
private final KeyValueConsumer<DataKey, DataResource> combiningResources;
private final List<Exception> errors;
- private boolean inValuesSubtree;
+ private ResourceFolderType folderType;
private FullyQualifiedName.Factory fqnFactory;
private final XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
@@ -276,19 +279,28 @@ public class ParsedAndroidData {
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
throws IOException {
final String[] dirNameAndQualifiers = dir.getFileName().toString().split("-");
- inValuesSubtree = "values".equals(dirNameAndQualifiers[0]);
- fqnFactory = FullyQualifiedName.Factory.fromDirectoryName(dirNameAndQualifiers);
- return FileVisitResult.CONTINUE;
+ folderType = ResourceFolderType.getTypeByName(dirNameAndQualifiers[0]);
+ if (folderType == null) {
+ return FileVisitResult.CONTINUE;
+ }
+ try {
+ fqnFactory = FullyQualifiedName.Factory.fromDirectoryName(dirNameAndQualifiers);
+ return FileVisitResult.CONTINUE;
+ } catch (IllegalArgumentException e) {
+ logger.warning(
+ String.format("%s is an invalid resource directory due to %s", dir, e.getMessage()));
+ return FileVisitResult.SKIP_SUBTREE;
+ }
}
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
try {
if (!Files.isDirectory(path) && !path.getFileName().toString().startsWith(".")) {
- if (inValuesSubtree) {
+ if (folderType == ResourceFolderType.VALUES) {
DataResourceXml.parse(
xmlInputFactory, path, fqnFactory, overwritingConsumer, combiningResources);
- } else {
+ } else if (folderType != null) {
String rawFqn = deriveRawFullyQualifiedName(path);
FullyQualifiedName key = fqnFactory.parse(rawFqn);
overwritingConsumer.consume(key, DataValueFile.of(path));