summaryrefslogtreecommitdiff
path: root/tools/aapt2/Debug.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt2/Debug.cpp')
-rw-r--r--tools/aapt2/Debug.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/tools/aapt2/Debug.cpp b/tools/aapt2/Debug.cpp
index 19bd5210c840..304e571832f4 100644
--- a/tools/aapt2/Debug.cpp
+++ b/tools/aapt2/Debug.cpp
@@ -247,5 +247,59 @@ void Debug::dumpHex(const void* data, size_t len) {
}
}
+namespace {
+
+class XmlPrinter : public xml::Visitor {
+public:
+ using xml::Visitor::visit;
+
+ void visit(xml::Element* el) override {
+ std::cerr << mPrefix;
+ std::cerr << "E: ";
+ if (!el->namespaceUri.empty()) {
+ std::cerr << el->namespaceUri << ":";
+ }
+ std::cerr << el->name << " (line=" << el->lineNumber << ")\n";
+
+ for (const xml::Attribute& attr : el->attributes) {
+ std::cerr << mPrefix << " A: ";
+ if (!attr.namespaceUri.empty()) {
+ std::cerr << attr.namespaceUri << ":";
+ }
+ std::cerr << attr.name << "=" << attr.value << "\n";
+ }
+
+ const size_t previousSize = mPrefix.size();
+ mPrefix += " ";
+ xml::Visitor::visit(el);
+ mPrefix.resize(previousSize);
+ }
+
+ void visit(xml::Namespace* ns) override {
+ std::cerr << mPrefix;
+ std::cerr << "N: " << ns->namespacePrefix << "=" << ns->namespaceUri
+ << " (line=" << ns->lineNumber << ")\n";
+
+ const size_t previousSize = mPrefix.size();
+ mPrefix += " ";
+ xml::Visitor::visit(ns);
+ mPrefix.resize(previousSize);
+ }
+
+ void visit(xml::Text* text) override {
+ std::cerr << mPrefix;
+ std::cerr << "T: '" << text->text << "'\n";
+ }
+
+private:
+ std::string mPrefix;
+};
+
+} // namespace
+
+void Debug::dumpXml(xml::XmlResource* doc) {
+ XmlPrinter printer;
+ doc->root->accept(&printer);
+}
} // namespace aapt