AAPT2: Support -c configuration filtering
Change-Id: I1e5855ca73440bdc30c21bcbc1dfdd31a9842363
diff --git a/tools/aapt2/link/TableMerger.cpp b/tools/aapt2/link/TableMerger.cpp
index 27a23bd..e01a004 100644
--- a/tools/aapt2/link/TableMerger.cpp
+++ b/tools/aapt2/link/TableMerger.cpp
@@ -100,7 +100,7 @@
return false;
}
- mFilesToMerge[ResourceKeyRef{ name, config }] = FileToMerge{
+ mFilesToMerge[ResourceKeyRef(name, config)] = FileToMerge{
f, oldFile->getSource(), util::utf16ToUtf8(*newFile->path) };
return true;
};
@@ -201,6 +201,9 @@
auto iter = std::lower_bound(dstEntry->values.begin(), dstEntry->values.end(),
srcValue.config, cmp::lessThanConfig);
+ const bool stripConfig = mOptions.filter ?
+ !mOptions.filter->match(srcValue.config) : false;
+
if (iter != dstEntry->values.end() && iter->config == srcValue.config) {
const int collisionResult = ResourceTable::resolveValueCollision(
iter->value.get(), srcValue.value.get());
@@ -224,11 +227,15 @@
continue;
}
- } else {
+ } else if (!stripConfig){
// Insert a place holder value. We will fill it in below.
iter = dstEntry->values.insert(iter, ResourceConfigValue{ srcValue.config });
}
+ if (stripConfig) {
+ continue;
+ }
+
if (FileReference* f = valueCast<FileReference>(srcValue.value.get())) {
std::unique_ptr<FileReference> newFileRef;
if (manglePackage) {
@@ -287,7 +294,7 @@
auto callback = [&](const ResourceNameRef& name, const ConfigDescription& config,
FileReference* newFile, FileReference* oldFile) -> bool {
- mFilesToMerge[ResourceKeyRef{ name, config }] = FileToMerge{
+ mFilesToMerge[ResourceKeyRef(name, config)] = FileToMerge{
file, oldFile->getSource(), util::utf16ToUtf8(*newFile->path) };
return true;
};