From 24aad163bc88cb10d2275385e9afc3de7f342d65 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Fri, 24 Apr 2015 19:19:30 -0700 Subject: Add namespace handling in attribute values Previously, you could only reference namespace prefixes in attribute names: & resolver, + ReferenceIdToNameVisitor(const std::shared_ptr& resolver, std::map* cache) : mResolver(resolver), mCache(cache) { } @@ -96,30 +96,25 @@ private: reference.name = cacheIter->second; reference.id = 0; } else { - const android::ResTable& table = mResolver->getResTable(); - android::ResTable::resource_name resourceName; - if (table.getResourceName(reference.id.id, false, &resourceName)) { - const ResourceType* type = parseResourceType(StringPiece16(resourceName.type, - resourceName.typeLen)); - assert(type); - reference.name.package.assign(resourceName.package, resourceName.packageLen); - reference.name.type = *type; - reference.name.entry.assign(resourceName.name, resourceName.nameLen); - reference.id = 0; + Maybe result = mResolver->findName(reference.id); + if (result) { + reference.name = result.value(); // Add to cache. mCache->insert({reference.id, reference.name}); + + reference.id = 0; } } } - std::shared_ptr mResolver; + std::shared_ptr mResolver; std::map* mCache; }; BinaryResourceParser::BinaryResourceParser(const std::shared_ptr& table, - const std::shared_ptr& resolver, + const std::shared_ptr& resolver, const Source& source, const void* data, size_t len) : -- cgit v1.1