diff options
author | Googler <noreply@google.com> | 2016-10-06 20:21:56 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-10-07 08:08:04 +0000 |
commit | 4f005551b52083f1e8995f799d4dc8a690604d95 (patch) | |
tree | dd015311f1d71cefa7b7dbd2fe52fbfd2927fb2b /src/tools/android/java/com/google/devtools/build/android/FullyQualifiedName.java | |
parent | 69d9b417534aae71728c5f6bcc67fe44bb4e4241 (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.java | 82 |
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". |