Loading tools/aapt2/Android.mk +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ LOCAL_PATH:= $(call my-dir) main := Main.cpp sources := \ compile/IdAssigner.cpp \ compile/InlineXmlFormatParser.cpp \ compile/Png.cpp \ compile/PseudolocaleGenerator.cpp \ compile/Pseudolocalizer.cpp \ Loading @@ -31,6 +32,7 @@ sources := \ flatten/Archive.cpp \ flatten/TableFlattener.cpp \ flatten/XmlFlattener.cpp \ io/File.cpp \ io/FileSystem.cpp \ io/ZipArchive.cpp \ link/AutoVersioner.cpp \ Loading Loading @@ -77,6 +79,7 @@ sources += Format.proto testSources := \ compile/IdAssigner_test.cpp \ compile/InlineXmlFormatParser_test.cpp \ compile/PseudolocaleGenerator_test.cpp \ compile/Pseudolocalizer_test.cpp \ compile/XmlIdCollector_test.cpp \ Loading tools/aapt2/Debug.cpp +54 −0 Original line number Diff line number Diff line Loading @@ -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 tools/aapt2/Debug.h +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include "Resource.h" #include "ResourceTable.h" #include "xml/XmlDom.h" // Include for printf-like debugging. #include <iostream> Loading @@ -34,6 +35,7 @@ struct Debug { static void printStyleGraph(ResourceTable* table, const ResourceName& targetStyle); static void dumpHex(const void* data, size_t len); static void dumpXml(xml::XmlResource* doc); }; } // namespace aapt Loading tools/aapt2/ResourceParser.cpp +2 −31 Original line number Diff line number Diff line Loading @@ -925,35 +925,6 @@ Maybe<Attribute::Symbol> ResourceParser::parseEnumOrFlagItem(xml::XmlPullParser* Reference(ResourceNameRef({}, ResourceType::kId, maybeName.value())), val.data }; } static Maybe<Reference> parseXmlAttributeName(StringPiece str) { str = util::trimWhitespace(str); const char* start = str.data(); const char* const end = start + str.size(); const char* p = start; Reference ref; if (p != end && *p == '*') { ref.privateReference = true; start++; p++; } StringPiece package; StringPiece name; while (p != end) { if (*p == ':') { package = StringPiece(start, p - start); name = StringPiece(p + 1, end - (p + 1)); break; } p++; } ref.name = ResourceName(package.toString(), ResourceType::kAttr, name.empty() ? str.toString() : name.toString()); return Maybe<Reference>(std::move(ref)); } bool ResourceParser::parseStyleItem(xml::XmlPullParser* parser, Style* style) { const Source source = mSource.withLine(parser->getLineNumber()); Loading @@ -963,7 +934,7 @@ bool ResourceParser::parseStyleItem(xml::XmlPullParser* parser, Style* style) { return false; } Maybe<Reference> maybeKey = parseXmlAttributeName(maybeName.value()); Maybe<Reference> maybeKey = ResourceUtils::parseXmlAttributeName(maybeName.value()); if (!maybeKey) { mDiag->error(DiagMessage(source) << "invalid attribute name '" << maybeName.value() << "'"); return false; Loading Loading @@ -1226,7 +1197,7 @@ bool ResourceParser::parseDeclareStyleable(xml::XmlPullParser* parser, // If this is a declaration, the package name may be in the name. Separate these out. // Eg. <attr name="android:text" /> Maybe<Reference> maybeRef = parseXmlAttributeName(maybeName.value()); Maybe<Reference> maybeRef = ResourceUtils::parseXmlAttributeName(maybeName.value()); if (!maybeRef) { mDiag->error(DiagMessage(itemSource) << "<attr> tag has invalid name '" << maybeName.value() << "'"); Loading tools/aapt2/ResourceTable.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -327,7 +327,7 @@ bool ResourceTable::addFileReferenceImpl(const ResourceNameRef& name, fileRef->setSource(source); fileRef->file = file; return addResourceImpl(name, ResourceId{}, config, StringPiece{}, std::move(fileRef), kValidNameChars, resolveValueCollision, diag); validChars, resolveValueCollision, diag); } bool ResourceTable::addResourceAllowMangled(const ResourceNameRef& name, Loading Loading
tools/aapt2/Android.mk +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ LOCAL_PATH:= $(call my-dir) main := Main.cpp sources := \ compile/IdAssigner.cpp \ compile/InlineXmlFormatParser.cpp \ compile/Png.cpp \ compile/PseudolocaleGenerator.cpp \ compile/Pseudolocalizer.cpp \ Loading @@ -31,6 +32,7 @@ sources := \ flatten/Archive.cpp \ flatten/TableFlattener.cpp \ flatten/XmlFlattener.cpp \ io/File.cpp \ io/FileSystem.cpp \ io/ZipArchive.cpp \ link/AutoVersioner.cpp \ Loading Loading @@ -77,6 +79,7 @@ sources += Format.proto testSources := \ compile/IdAssigner_test.cpp \ compile/InlineXmlFormatParser_test.cpp \ compile/PseudolocaleGenerator_test.cpp \ compile/Pseudolocalizer_test.cpp \ compile/XmlIdCollector_test.cpp \ Loading
tools/aapt2/Debug.cpp +54 −0 Original line number Diff line number Diff line Loading @@ -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
tools/aapt2/Debug.h +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include "Resource.h" #include "ResourceTable.h" #include "xml/XmlDom.h" // Include for printf-like debugging. #include <iostream> Loading @@ -34,6 +35,7 @@ struct Debug { static void printStyleGraph(ResourceTable* table, const ResourceName& targetStyle); static void dumpHex(const void* data, size_t len); static void dumpXml(xml::XmlResource* doc); }; } // namespace aapt Loading
tools/aapt2/ResourceParser.cpp +2 −31 Original line number Diff line number Diff line Loading @@ -925,35 +925,6 @@ Maybe<Attribute::Symbol> ResourceParser::parseEnumOrFlagItem(xml::XmlPullParser* Reference(ResourceNameRef({}, ResourceType::kId, maybeName.value())), val.data }; } static Maybe<Reference> parseXmlAttributeName(StringPiece str) { str = util::trimWhitespace(str); const char* start = str.data(); const char* const end = start + str.size(); const char* p = start; Reference ref; if (p != end && *p == '*') { ref.privateReference = true; start++; p++; } StringPiece package; StringPiece name; while (p != end) { if (*p == ':') { package = StringPiece(start, p - start); name = StringPiece(p + 1, end - (p + 1)); break; } p++; } ref.name = ResourceName(package.toString(), ResourceType::kAttr, name.empty() ? str.toString() : name.toString()); return Maybe<Reference>(std::move(ref)); } bool ResourceParser::parseStyleItem(xml::XmlPullParser* parser, Style* style) { const Source source = mSource.withLine(parser->getLineNumber()); Loading @@ -963,7 +934,7 @@ bool ResourceParser::parseStyleItem(xml::XmlPullParser* parser, Style* style) { return false; } Maybe<Reference> maybeKey = parseXmlAttributeName(maybeName.value()); Maybe<Reference> maybeKey = ResourceUtils::parseXmlAttributeName(maybeName.value()); if (!maybeKey) { mDiag->error(DiagMessage(source) << "invalid attribute name '" << maybeName.value() << "'"); return false; Loading Loading @@ -1226,7 +1197,7 @@ bool ResourceParser::parseDeclareStyleable(xml::XmlPullParser* parser, // If this is a declaration, the package name may be in the name. Separate these out. // Eg. <attr name="android:text" /> Maybe<Reference> maybeRef = parseXmlAttributeName(maybeName.value()); Maybe<Reference> maybeRef = ResourceUtils::parseXmlAttributeName(maybeName.value()); if (!maybeRef) { mDiag->error(DiagMessage(itemSource) << "<attr> tag has invalid name '" << maybeName.value() << "'"); Loading
tools/aapt2/ResourceTable.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -327,7 +327,7 @@ bool ResourceTable::addFileReferenceImpl(const ResourceNameRef& name, fileRef->setSource(source); fileRef->file = file; return addResourceImpl(name, ResourceId{}, config, StringPiece{}, std::move(fileRef), kValidNameChars, resolveValueCollision, diag); validChars, resolveValueCollision, diag); } bool ResourceTable::addResourceAllowMangled(const ResourceNameRef& name, Loading