diff options
author | 2016-05-21 16:19:56 +0000 | |
---|---|---|
committer | 2016-05-23 08:25:15 +0000 | |
commit | c990a319b8ad0f43528f243e0b6b1b5a5815b0b0 (patch) | |
tree | d78a4d1ca74f108fc3e70813f59be79ff8746d0f /src/tools/android/java/com/google/devtools/build/android/ParsedAndroidData.java | |
parent | 48dff6b80bf83253ad0b852929b57a986041c46e (diff) |
Rollback of commit d3cccae7b663d5defea2943509b0d9d245279830.
*** 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.java | 24 |
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)); |