| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Dynamically Configured Resource Filtering change 3/6
Resource filtering behaves somewhat differently when dynamically configured.
Resources obtained from dependencies will have already been filtered and do not
need to be filtered again. Resources that were filtered out do not need to be
tracked since resource processing will never receive a reference to them
anyway.
Also, to make builds where ResourceFilter is dynamically configured, add equals
and hashCode methods (otherwise, the configuration code throws a
NullPointerException) and a global output prefix (otherwise, conflicts can
occur).
To ensure that the global output prefix (and the ResourceFilter object itself)
is the same regardless of the ordering of filters in the android_binary, build
the filters into a set, not a list, and sort them as part of creating the
ResourceFilter object. This way, for example, objects built with filters
"en,fr", "fr,en", and "en,en,fr" will all end up equal.
Finally, rename the getFilteredResources method to better reflect its new role,
and improve the isPrefiltering method to not try to prefilter if there are no
filters.
Add tests for all of this, and helper methods for all of those tests, including,
most notably, a makeResourceFilter method that instantiates a ResourceFilter
similarly to how it is actually created outside of tests (rather than directly
calling the constructor) and a fake implementation of AttributeMap to support
this.
RELNOTES: none
PiperOrigin-RevId: 162099178
|
|
|
|
|
|
|
|
|
| |
ResourceFilter already handles problematic qualifiers in the
resource_configuration_filters attribute. Also handle them in references to
individual resources.
RELNOTES: none
PiperOrigin-RevId: 160969753
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two special types of language qualifiers are commonly used:
Serbian can be written in Latin or Cyrillic characters. Serbian in Latin
characters is referred to as sr-Latn (or, with a misplaced region prefix,
sr-rLatn, or with the permutation common in some code for the old verions of
regions supported by Aapt, sr_Latn).
Spanish spoken across Latin America and the Caribbean can be represented by
es-419 (or, using the permutation for old qualifier formats, es_419).
For both of these, transform the resource qualifier into an appropriate BCP-47
representation that can be handled by FolderConfiguration.
Also, add attribute warnings when these qualifiers are used in their specially-handled form (instead of in BCP-47 form).
RELNOTES: none
PiperOrigin-RevId: 160143247
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before this change, resource filtering by densities could rearrange the
ordering of resources. However, resource merging behavior is dependant on
resource ordering, so changing the order could lead to changed merge results.
Instead, ensure that the filtered resources appear in the same order as they
did in the original list of resources.
RELNOTES: none
PiperOrigin-RevId: 159219647
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ResourceFilter, following Aapt's behavior, ignored the 'version' qualifier.
However, ResourceFilter also filters by densities, which is not supposed to
ignore the version qualifier. Change ResourceFilter to only ignore the version
qualifier when filtering by resource_configuration_filters, not densities.
Without this change, when filtering by density, ResourceFilter would treat, for
example, res-hdpi-v4/foo.png and res-hdpi-v11/foo.png as identical, even though
they have different versions, and only use one of them when building the newly
filtered list of resources. Instead, they should both be included.
Also include a unit test that covers this behavior. Rather than add this in
AndroidBinaryTest, create a new ResourceFilterTest class. To support that, move
ResourceFilter from using the test-unfriendly RuleContext class to the
easy-to-fake RuleErrorConsumer whenever possible.
RELNOTES: none
PiperOrigin-RevId: 159122507
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
Once the ResourceFilter object is in AndroidConfiguration, we can start
tweaking it using dynamic configuration (next review).
RELNOTES: none
PiperOrigin-RevId: 151737284
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The RuleContext object is not available when creating dynamic configuration
transitions. Removing it from ResourceFilter's state allows us to work with
ResourceFilter objects while creating those transitions. If we didn't do this,
we'd need to seperate the rest of ResourceFilter's state into a seperate class
so that we could work with it as part of doing dynamic configurations.
In the next reviews, I'll start actually creating dynamic configurations based
on ResourceFilter state.
Also, create a withAttrsFrom method that can be used in dynamic configuration
transitions, and generally migrate methods that work with attributes from
RuleContext to AttributeMap when practical.
To support these changes:
No longer keep the parsed lists of FolderConfiguration and Density objects as
fields of the ResourceFilter, instead, write functions that get them when
needed. We want to have access to a RuleContext when we initialize them to avoid
errors, and we don't have one in the withAttrsFrom method which will be called
as part of transitioning with dynamic configurations.
We no longer have those parsed lists to represent whether the object filters
during execution or analysis, so replace them with a seperate enum field for
filter behavior. Include a FILTER_IN_ANALYSIS_WITH_DYNAMIC_CONFIGURATION
option, even though it won't fully be used until the dynamic configuration
transition is taken advantage of in the next few reviews.
RELNOTES: none
PiperOrigin-RevId: 151715400
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Rollback of commit df366408188f0451bae9b2ed079c795a4beb2e2b.
In addition to undoing the rollback of my previous change, fix the bugs it
introduced and add tests for those bugs.
Always ignore empty filters. Empty filters are always useless or
counterproductive. Before the original change, empty filters as a single item
within the list of filters (e.g., ["en", ""]) were ignored, but empty filters
as a portion of a string in the list (e.g., ["en,"]) were not. I can't imagine
any reason people would actually want the empty filter (if it were handled
correctly, it would effectively tell Bazel to just ignore every other filter
the user passed in).
Since it makes more sense with the new code, represent the stringified filters
as a list of strings, rather than a single string of comma-seperated values.
Manually trim whitespace from each token. Before the original change, the code
trimmed whitespace following commas (e.g., ["en, es"] -> ["en,es"]) but not
otherwise. If we're allowing whitespace in filter strings anyway, there doesn't
seem to be any reason to allow it in some places but not others.
--
PiperOrigin-RevId: 151128685
MOS_MIGRATED_REVID=151128685
|
|
|
|
|
|
| |
--
PiperOrigin-RevId: 151000602
MOS_MIGRATED_REVID=151000602
|
|
In addition to filtering android_binary resources by
resource_configuration_filters, we also filter by densities. Doing this in
analysis rather than execution should also result in a speed-up as there's no
need to copy files unwanted for actions to use.
This behavior is controlled by the same object and flags that already
control resource configuration filtering, simplifying the code.
--
PiperOrigin-RevId: 150871620
MOS_MIGRATED_REVID=150871620
|