aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-05-15 19:39:36 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-05-15 23:20:33 +0200
commit4ae59984ec23c06e04e4de3888dd5d5b255ef22e (patch)
treed735688621859dc882aa3313500ecd009b808754 /src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java
parent866ecc8c3d5e0b899e3f0c9c6b2265f16daae842 (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.java23
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) {