diff options
author | 2017-05-15 19:39:36 +0200 | |
---|---|---|
committer | 2017-05-15 23:20:33 +0200 | |
commit | 4ae59984ec23c06e04e4de3888dd5d5b255ef22e (patch) | |
tree | d735688621859dc882aa3313500ecd009b808754 /src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java | |
parent | 866ecc8c3d5e0b899e3f0c9c6b2265f16daae842 (diff) |
Convert locale qualifiers from old Aapt format to correct format before parsing
Aapt used to require resource locale qualifiers with regions of the form
'en_US', rather than the correct Android 'en-rUS'. The resource qualifier
processing code used by ResourceFilter cannot handle the (incorrect) Aapt
format.
However, for backwards compatability, we want to continue supporting the Aapt
format. Handle it by using a regex to replace the old format with the correct
format when parsing.
RELNOTES: none
PiperOrigin-RevId: 156072395
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java index fd3658889f..d61beaabf5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java @@ -197,7 +197,7 @@ public class ResourceFilter { ImmutableList.Builder<FolderConfiguration> filterBuilder = ImmutableList.builder(); for (String filter : configFilters) { addIfNotNull( - FolderConfiguration.getConfigForQualifierString(filter), + getFolderConfiguration(filter), filter, filterBuilder, ruleContext, @@ -207,6 +207,27 @@ public class ResourceFilter { return filterBuilder.build(); } + private static FolderConfiguration getFolderConfiguration(String filter) { + /* + * Aapt used to expect locale configurations of form 'en_US'. It now also supports the correct + * 'en-rUS' format. For backwards comparability, use a regex to convert filters with locales in + * the old format to filters with locales of the correct format. + * + * The correct format for locales is defined at + * https://developer.android.com/guide/topics/resources/providing-resources.html#LocaleQualifier + * + * TODO(bazel-team): Migrate consumers away from the old Aapt locale format, then remove this + * replacement. + * + * The regex is a bit complicated to avoid modifying potential new qualifiers that contain + * underscores. Specifically, it searches for the entire beginning of the resource qualifier, + * including (optionally) MCC and MNC, and then the locale itself. + */ + String fixedFilter = + filter.replaceFirst("^((mcc[0-9]{3}-(mnc[0-9]{3}-)?)?[a-z]{2})_([A-Z]{2})", "$1-r$4"); + return FolderConfiguration.getConfigForQualifierString(fixedFilter); + } + private ImmutableList<Density> getDensities(RuleContext ruleContext) { ImmutableList.Builder<Density> densityBuilder = ImmutableList.builder(); for (String density : densities) { |