/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "link/Linkers.h" #include #include "ResourceTable.h" namespace aapt { namespace { // Visits each xml Node, removing URI references and nested namespaces. class XmlVisitor : public xml::Visitor { public: explicit XmlVisitor(bool keep_uris) : keep_uris_(keep_uris) {} void Visit(xml::Element* el) override { el->namespace_decls.clear(); if (!keep_uris_) { for (xml::Attribute& attr : el->attributes) { attr.namespace_uri.clear(); } el->namespace_uri.clear(); } xml::Visitor::Visit(el); } private: DISALLOW_COPY_AND_ASSIGN(XmlVisitor); bool keep_uris_; }; } // namespace bool XmlNamespaceRemover::Consume(IAaptContext* context, xml::XmlResource* resource) { if (!resource->root) { return false; } XmlVisitor visitor(keep_uris_); resource->root->Accept(&visitor); return true; } } // namespace aapt