summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2018-04-18 21:54:47 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-04-18 21:54:47 +0000
commitb2182c412c534be18a3b0c869d186fcf91a86a6d (patch)
treeced776904ff0c4682642648dcfb04ca4902fb431
parent2ee3ef0511eb2022597651dde68e3485148a42a4 (diff)
parent4602926f83d7aa3b52b190122955b5b0d6d8089d (diff)
Merge "AAPT2: Modified StringPool uniqueness detection #2" into pi-dev
-rw-r--r--tools/aapt2/StringPool.cpp8
-rw-r--r--tools/aapt2/StringPool_test.cpp11
2 files changed, 16 insertions, 3 deletions
diff --git a/tools/aapt2/StringPool.cpp b/tools/aapt2/StringPool.cpp
index b0ce9e1ec947..b37e1fbd9693 100644
--- a/tools/aapt2/StringPool.cpp
+++ b/tools/aapt2/StringPool.cpp
@@ -172,9 +172,11 @@ StringPool::Ref StringPool::MakeRef(const StringPiece& str, const Context& conte
StringPool::Ref StringPool::MakeRefImpl(const StringPiece& str, const Context& context,
bool unique) {
if (unique) {
- auto iter = indexed_strings_.find(str);
- if (iter != std::end(indexed_strings_)) {
- return Ref(iter->second);
+ auto range = indexed_strings_.equal_range(str);
+ for (auto iter = range.first; iter != range.second; ++iter) {
+ if (context.priority == iter->second->context.priority) {
+ return Ref(iter->second);
+ }
}
}
diff --git a/tools/aapt2/StringPool_test.cpp b/tools/aapt2/StringPool_test.cpp
index 58a03de60f93..4b3afe2bb962 100644
--- a/tools/aapt2/StringPool_test.cpp
+++ b/tools/aapt2/StringPool_test.cpp
@@ -61,6 +61,17 @@ TEST(StringPoolTest, DoNotInsertNewDuplicateString) {
EXPECT_THAT(pool.size(), Eq(1u));
}
+TEST(StringPoolTest, DoNotDedupeSameStringDifferentPriority) {
+ StringPool pool;
+
+ StringPool::Ref ref_a = pool.MakeRef("wut", StringPool::Context(0x81010001));
+ StringPool::Ref ref_b = pool.MakeRef("wut", StringPool::Context(0x81010002));
+
+ EXPECT_THAT(*ref_a, Eq("wut"));
+ EXPECT_THAT(*ref_b, Eq("wut"));
+ EXPECT_THAT(pool.size(), Eq(2u));
+}
+
TEST(StringPoolTest, MaintainInsertionOrderIndex) {
StringPool pool;