diff options
-rw-r--r-- | tools/aapt2/StringPool.cpp | 7 | ||||
-rw-r--r-- | tools/aapt2/StringPool_test.cpp | 12 |
2 files changed, 15 insertions, 4 deletions
diff --git a/tools/aapt2/StringPool.cpp b/tools/aapt2/StringPool.cpp index b0ce9e1ec947..73a8259a3a87 100644 --- a/tools/aapt2/StringPool.cpp +++ b/tools/aapt2/StringPool.cpp @@ -172,9 +172,10 @@ 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); + for (auto& indexed_str : indexed_strings_) { + if (str == indexed_str.first && context.priority == indexed_str.second->context.priority) { + return Ref(indexed_str.second); + } } } diff --git a/tools/aapt2/StringPool_test.cpp b/tools/aapt2/StringPool_test.cpp index 58a03de60f93..5f7d3d6b1d03 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(1)); + StringPool::Ref ref_b = pool.MakeRef("wut", StringPool::Context(2)); + + EXPECT_THAT(*ref_a, Eq("wut")); + EXPECT_THAT(*ref_b, Eq("wut")); + EXPECT_THAT(pool.size(), Eq(2u)); +} + TEST(StringPoolTest, MaintainInsertionOrderIndex) { StringPool pool; @@ -292,7 +303,6 @@ TEST(StringPoolTest, Flatten) { } } - TEST(StringPoolTest, MaxEncodingLength) { StdErrDiagnostics diag; using namespace android; // For NO_ERROR on Windows. |