diff options
author | Adam Lesinski <adamlesinski@google.com> | 2017-10-20 19:15:54 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-10-20 19:15:54 +0000 |
commit | 7fd74b5ad1df53b92f08a9aa2f3d445bf7b786fe (patch) | |
tree | 03bbf941ec0fead1ad64ba2acd06113486a612c1 /tools/aapt2/xml/XmlUtil.cpp | |
parent | 4bf7416a062af25574f548846e60e88df332cc55 (diff) | |
parent | e59f0d80ec19249f72c07ae191ad673d040443e3 (diff) |
Merge changes I1a4b3ce5,Id7216e5b
* changes:
AAPT2: Enable building proto artifacts
AAPT2: Define and Implement AAPT Container Format
Diffstat (limited to 'tools/aapt2/xml/XmlUtil.cpp')
-rw-r--r-- | tools/aapt2/xml/XmlUtil.cpp | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/tools/aapt2/xml/XmlUtil.cpp b/tools/aapt2/xml/XmlUtil.cpp index c1186e83369c..0a622b2bd336 100644 --- a/tools/aapt2/xml/XmlUtil.cpp +++ b/tools/aapt2/xml/XmlUtil.cpp @@ -16,20 +16,20 @@ #include "xml/XmlUtil.h" +#include <algorithm> #include <string> #include "util/Maybe.h" #include "util/Util.h" +#include "xml/XmlDom.h" -using android::StringPiece; +using ::android::StringPiece; namespace aapt { namespace xml { -std::string BuildPackageNamespace(const StringPiece& package, - bool private_reference) { - std::string result = - private_reference ? kSchemaPrivatePrefix : kSchemaPublicPrefix; +std::string BuildPackageNamespace(const StringPiece& package, bool private_reference) { + std::string result = private_reference ? kSchemaPrivatePrefix : kSchemaPublicPrefix; result.append(package.data(), package.size()); return result; } @@ -39,8 +39,7 @@ Maybe<ExtractedPackage> ExtractPackageFromNamespace( if (util::StartsWith(namespace_uri, kSchemaPublicPrefix)) { StringPiece schema_prefix = kSchemaPublicPrefix; StringPiece package = namespace_uri; - package = package.substr(schema_prefix.size(), - package.size() - schema_prefix.size()); + package = package.substr(schema_prefix.size(), package.size() - schema_prefix.size()); if (package.empty()) { return {}; } @@ -49,8 +48,7 @@ Maybe<ExtractedPackage> ExtractPackageFromNamespace( } else if (util::StartsWith(namespace_uri, kSchemaPrivatePrefix)) { StringPiece schema_prefix = kSchemaPrivatePrefix; StringPiece package = namespace_uri; - package = package.substr(schema_prefix.size(), - package.size() - schema_prefix.size()); + package = package.substr(schema_prefix.size(), package.size() - schema_prefix.size()); if (package.empty()) { return {}; } @@ -76,5 +74,33 @@ void ResolvePackage(const IPackageDeclStack* decl_stack, Reference* in_ref) { } } +namespace { + +class ToolsNamespaceRemover : public Visitor { + public: + using Visitor::Visit; + + void Visit(Element* el) override { + auto new_end = + std::remove_if(el->namespace_decls.begin(), el->namespace_decls.end(), + [](const NamespaceDecl& decl) -> bool { return decl.uri == kSchemaTools; }); + el->namespace_decls.erase(new_end, el->namespace_decls.end()); + + auto new_attr_end = std::remove_if( + el->attributes.begin(), el->attributes.end(), + [](const Attribute& attr) -> bool { return attr.namespace_uri == kSchemaTools; }); + el->attributes.erase(new_attr_end, el->attributes.end()); + + Visitor::Visit(el); + } +}; + +} // namespace + +void StripAndroidStudioAttributes(Element* el) { + ToolsNamespaceRemover remover; + el->Accept(&remover); +} + } // namespace xml } // namespace aapt |