Merge "AAPT: Modified StringPool uniqueness detection" into pi-dev

This commit is contained in:
Ryan Mitchell
2018-04-16 17:15:53 +00:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 4 deletions

View File

@@ -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);
}
}
}

View File

@@ -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.