aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-10-06 20:21:56 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-10-07 08:08:04 +0000
commit4f005551b52083f1e8995f799d4dc8a690604d95 (patch)
treedd015311f1d71cefa7b7dbd2fe52fbfd2927fb2b /src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java
parent69d9b417534aae71728c5f6bcc67fe44bb4e4241 (diff)
Update android_ide_common to 25.0.0 and clean up FolderConfigs
Older android_ide_common does not handle BCP 47, so we update the code to handle that and remove most of the workarounds. This also pulls in a fix for 3-letter locales, unblocks resource shrinking whitelisting, etc. -- MOS_MIGRATED_REVID=135396457
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java82
1 files changed, 14 insertions, 68 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java b/src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java
index 4039280dfe..5ae3e2cc07 100644
--- a/src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java
+++ b/src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java
@@ -25,8 +25,6 @@ import com.google.common.collect.PeekingIterator;
import com.google.devtools.build.android.proto.SerializeFormat;
import java.io.IOException;
import java.io.OutputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -61,7 +59,7 @@ public class FullyQualifiedName implements DataKey {
* A factory for parsing an generating FullyQualified names with qualifiers and package.
*/
public static class Factory {
- private static final String BCP_PREFIX = "b+";
+
private static final Pattern PARSING_REGEX =
Pattern.compile("(?:(?<package>[^:]+):){0,1}(?<type>[^-/]+)(?:[^/]*)/(?<name>.+)");
public static final String INVALID_QUALIFIED_NAME_MESSAGE_NO_MATCH =
@@ -93,40 +91,29 @@ public class FullyQualifiedName implements DataKey {
Iterators.peekingIterator(Iterators.forArray(dirNameAndQualifiers));
// Remove directory name
rawQualifiers.next();
- List<String> unHandledLanguageRegionQualifiers = new ArrayList<>();
- List<String> unHandledDensityQualifiers = new ArrayList<>();
- List<String> unHandledUIModeQualifiers = new ArrayList<>();
+ List<String> transformedLocaleQualifiers = new ArrayList<>();
List<String> handledQualifiers = new ArrayList<>();
- // TODO(corysmith): Remove when FolderConfiguration is updated to handle BCP prefixes.
- // TODO(corysmith): Add back in handling for anydpi
+ // Do some substitution of language/region qualifiers.
while (rawQualifiers.hasNext()) {
String qualifier = rawQualifiers.next();
- if (qualifier.startsWith(BCP_PREFIX)) {
- // The b+local+script/region can't be handled.
- unHandledLanguageRegionQualifiers.add(qualifier);
- } else if ("es".equalsIgnoreCase(qualifier)
+ if ("es".equalsIgnoreCase(qualifier)
&& rawQualifiers.hasNext()
&& "419".equalsIgnoreCase(rawQualifiers.peek())) {
// Replace the es-419.
- unHandledLanguageRegionQualifiers.add("b+es+419");
+ transformedLocaleQualifiers.add("b+es+419");
// Consume the next value, as it's been replaced.
rawQualifiers.next();
} else if ("sr".equalsIgnoreCase(qualifier)
&& rawQualifiers.hasNext()
&& "rlatn".equalsIgnoreCase(rawQualifiers.peek())) {
// Replace the sr-rLatn.
- unHandledLanguageRegionQualifiers.add("b+sr+Latn");
+ transformedLocaleQualifiers.add("b+sr+Latn");
// Consume the next value, as it's been replaced.
rawQualifiers.next();
- } else if (qualifier.equals("anydpi")) {
- unHandledDensityQualifiers.add(qualifier);
- } else if (qualifier.equals("watch")) {
- unHandledUIModeQualifiers.add(qualifier);
} else {
// This qualifier can probably be handled by FolderConfiguration.
handledQualifiers.add(qualifier);
}
-
}
// Create a configuration
FolderConfiguration config = FolderConfiguration.getConfigFromQualifiers(handledQualifiers);
@@ -139,63 +126,22 @@ public class FullyQualifiedName implements DataKey {
config.normalize();
// This is fragile but better than the Gradle scheme of just dropping
- // entire subtrees.
+ // entire subtrees.
Builder<String> builder = ImmutableList.<String>builder();
addIfNotNull(config.getCountryCodeQualifier(), builder);
addIfNotNull(config.getNetworkCodeQualifier(), builder);
- if (unHandledLanguageRegionQualifiers.isEmpty()) {
- addIfNotNull(config.getLanguageQualifier(), builder);
- addIfNotNull(config.getRegionQualifier(), builder);
+ if (transformedLocaleQualifiers.isEmpty()) {
+ addIfNotNull(config.getLocaleQualifier(), builder);
} else {
- builder.addAll(unHandledLanguageRegionQualifiers);
+ builder.addAll(transformedLocaleQualifiers);
}
- addIfNotNull(config.getLayoutDirectionQualifier(), builder);
- addIfNotNull(config.getSmallestScreenWidthQualifier(), builder);
- addIfNotNull(config.getScreenWidthQualifier(), builder);
- addIfNotNull(config.getScreenHeightQualifier(), builder);
- addIfNotNull(config.getScreenSizeQualifier(), builder);
- addIfNotNull(config.getScreenRatioQualifier(), builder);
- addIfNotNullAndExist(config, "getScreenRoundQualifier", builder);
- addIfNotNull(config.getScreenOrientationQualifier(), builder);
- if (unHandledUIModeQualifiers.isEmpty()) {
- addIfNotNull(config.getUiModeQualifier(), builder);
- } else {
- builder.addAll(unHandledUIModeQualifiers);
+ // index 3 is past the country code, network code, and locale indices.
+ for (int i = 3; i < FolderConfiguration.getQualifierCount(); ++i) {
+ addIfNotNull(config.getQualifier(i), builder);
}
- addIfNotNull(config.getNightModeQualifier(), builder);
- if (unHandledDensityQualifiers.isEmpty()) {
- addIfNotNull(config.getDensityQualifier(), builder);
- } else {
- builder.addAll(unHandledDensityQualifiers);
- }
- addIfNotNull(config.getTouchTypeQualifier(), builder);
- addIfNotNull(config.getKeyboardStateQualifier(), builder);
- addIfNotNull(config.getTextInputMethodQualifier(), builder);
- addIfNotNull(config.getNavigationStateQualifier(), builder);
- addIfNotNull(config.getNavigationMethodQualifier(), builder);
- addIfNotNull(config.getScreenDimensionQualifier(), builder);
- addIfNotNull(config.getVersionQualifier(), builder);
-
return builder.build();
}
- private static void addIfNotNullAndExist(
- FolderConfiguration config, String methodName, Builder<String> builder) {
- try {
- Method method = config.getClass().getMethod(methodName);
- ResourceQualifier qualifier = (ResourceQualifier) method.invoke(config);
- if (qualifier != null) {
- builder.add(qualifier.getFolderSegment());
- }
- } catch (NoSuchMethodException
- | IllegalAccessException
- | IllegalArgumentException
- | InvocationTargetException e) {
- // Suppress the error and continue.
- return;
- }
- }
-
private static void addIfNotNull(
ResourceQualifier qualifier, ImmutableList.Builder<String> builder) {
if (qualifier != null) {
@@ -291,7 +237,7 @@ public class FullyQualifiedName implements DataKey {
}
/**
- * Creates a new FullyQualifiedName with sorted qualifiers.
+ * Creates a new FullyQualifiedName with normalized qualifiers.
*
* @param pkg The resource package of the name. If unknown the default should be "res-auto"
* @param qualifiers The resource qualifiers of the name, such as "en" or "xhdpi".