diff options
author | Adam Lesinski <adamlesinski@google.com> | 2015-08-14 14:26:04 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2015-10-16 12:13:08 -0700 |
commit | 1ab598f46c3ff520a67f9d80194847741f3467ab (patch) | |
tree | 4846790211599fdd7a9bb35ec94df4a6ec4839d6 /tools/aapt2/ResourceParser.h | |
parent | 547c346bb34878b691fd53e54aa3a88efcc5dc6f (diff) |
AAPT2: Separate out the various steps
An early refactor. Some ideas became clearer as
development continued. Now the various phases are much
clearer and more easily reusable.
Also added a ton of tests!
Change-Id: Ic8f0a70c8222370352e63533b329c40457c0903e
Diffstat (limited to 'tools/aapt2/ResourceParser.h')
-rw-r--r-- | tools/aapt2/ResourceParser.h | 131 |
1 files changed, 12 insertions, 119 deletions
diff --git a/tools/aapt2/ResourceParser.h b/tools/aapt2/ResourceParser.h index 7618999f0023..514e55852407 100644 --- a/tools/aapt2/ResourceParser.h +++ b/tools/aapt2/ResourceParser.h @@ -18,14 +18,15 @@ #define AAPT_RESOURCE_PARSER_H #include "ConfigDescription.h" -#include "Logger.h" +#include "Diagnostics.h" #include "ResourceTable.h" #include "ResourceValues.h" -#include "StringPiece.h" #include "StringPool.h" #include "XmlPullParser.h" -#include <istream> +#include "util/Maybe.h" +#include "util/StringPiece.h" + #include <memory> namespace aapt { @@ -35,118 +36,12 @@ namespace aapt { */ class ResourceParser { public: - /* - * Extracts the package, type, and name from a string of the format: - * - * [package:]type/name - * - * where the package can be empty. Validation must be performed on each - * individual extracted piece to verify that the pieces are valid. - */ - static void extractResourceName(const StringPiece16& str, StringPiece16* outPackage, - StringPiece16* outType, StringPiece16* outEntry); - - /* - * Returns true if the string was parsed as a reference (@[+][package:]type/name), with - * `outReference` set to the parsed reference. - * - * If '+' was present in the reference, `outCreate` is set to true. - * If '*' was present in the reference, `outPrivate` is set to true. - */ - static bool tryParseReference(const StringPiece16& str, ResourceNameRef* outReference, - bool* outCreate, bool* outPrivate); - - /* - * Returns true if the string was parsed as an attribute reference (?[package:]type/name), - * with `outReference` set to the parsed reference. - */ - static bool tryParseAttributeReference(const StringPiece16& str, - ResourceNameRef* outReference); - - /* - * Returns true if the string `str` was parsed as a valid reference to a style. - * The format for a style parent is slightly more flexible than a normal reference: - * - * @[package:]style/<entry> or - * ?[package:]style/<entry> or - * <package>:[style/]<entry> - */ - static bool parseStyleParentReference(const StringPiece16& str, Reference* outReference, - std::string* outError); - - /* - * Returns a Reference object if the string was parsed as a resource or attribute reference, - * ( @[+][package:]type/name | ?[package:]type/name ) setting outCreate to true if - * the '+' was present in the string. - */ - static std::unique_ptr<Reference> tryParseReference(const StringPiece16& str, - bool* outCreate); - - /* - * Returns a BinaryPrimitve object representing @null or @empty if the string was parsed - * as one. - */ - static std::unique_ptr<BinaryPrimitive> tryParseNullOrEmpty(const StringPiece16& str); - - /* - * Returns a BinaryPrimitve object representing a color if the string was parsed - * as one. - */ - static std::unique_ptr<BinaryPrimitive> tryParseColor(const StringPiece16& str); - - /* - * Returns a BinaryPrimitve object representing a boolean if the string was parsed - * as one. - */ - static std::unique_ptr<BinaryPrimitive> tryParseBool(const StringPiece16& str); - - /* - * Returns a BinaryPrimitve object representing an integer if the string was parsed - * as one. - */ - static std::unique_ptr<BinaryPrimitive> tryParseInt(const StringPiece16& str); - - /* - * Returns a BinaryPrimitve object representing a floating point number - * (float, dimension, etc) if the string was parsed as one. - */ - static std::unique_ptr<BinaryPrimitive> tryParseFloat(const StringPiece16& str); - - /* - * Returns a BinaryPrimitve object representing an enum symbol if the string was parsed - * as one. - */ - static std::unique_ptr<BinaryPrimitive> tryParseEnumSymbol(const Attribute& enumAttr, - const StringPiece16& str); - - /* - * Returns a BinaryPrimitve object representing a flag symbol if the string was parsed - * as one. - */ - static std::unique_ptr<BinaryPrimitive> tryParseFlagSymbol(const Attribute& enumAttr, - const StringPiece16& str); - /* - * Try to convert a string to an Item for the given attribute. The attribute will - * restrict what values the string can be converted to. - * The callback function onCreateReference is called when the parsed item is a - * reference to an ID that must be created (@+id/foo). - */ - static std::unique_ptr<Item> parseItemForAttribute( - const StringPiece16& value, const Attribute& attr, - std::function<void(const ResourceName&)> onCreateReference = {}); - - static std::unique_ptr<Item> parseItemForAttribute( - const StringPiece16& value, uint32_t typeMask, - std::function<void(const ResourceName&)> onCreateReference = {}); - - static uint32_t androidTypeToAttributeTypeMask(uint16_t type); - - ResourceParser(const std::shared_ptr<ResourceTable>& table, const Source& source, - const ConfigDescription& config, const std::shared_ptr<XmlPullParser>& parser); + ResourceParser(IDiagnostics* diag, ResourceTable* table, const Source& source, + const ConfigDescription& config); ResourceParser(const ResourceParser&) = delete; // No copy. - bool parse(); + bool parse(XmlPullParser* parser); private: /* @@ -155,7 +50,7 @@ private: * contains the escaped and whitespace trimmed text, while `outRawString` * contains the unescaped text. Returns true on success. */ - bool flattenXmlSubtree(XmlPullParser* parser, std::u16string* outRawString,\ + bool flattenXmlSubtree(XmlPullParser* parser, std::u16string* outRawString, StyleString* outStyleString); /* @@ -175,19 +70,17 @@ private: std::unique_ptr<Attribute> parseAttrImpl(XmlPullParser* parser, ResourceName* resourceName, bool weak); - bool parseEnumOrFlagItem(XmlPullParser* parser, const StringPiece16& tag, - Attribute::Symbol* outSymbol); + Maybe<Attribute::Symbol> parseEnumOrFlagItem(XmlPullParser* parser, const StringPiece16& tag); bool parseStyle(XmlPullParser* parser, const ResourceNameRef& resourceName); - bool parseUntypedItem(XmlPullParser* parser, Style& style); + bool parseStyleItem(XmlPullParser* parser, Style* style); bool parseDeclareStyleable(XmlPullParser* parser, const ResourceNameRef& resourceName); bool parseArray(XmlPullParser* parser, const ResourceNameRef& resourceName, uint32_t typeMask); bool parsePlural(XmlPullParser* parser, const ResourceNameRef& resourceName); - std::shared_ptr<ResourceTable> mTable; + IDiagnostics* mDiag; + ResourceTable* mTable; Source mSource; ConfigDescription mConfig; - SourceLogger mLogger; - std::shared_ptr<XmlPullParser> mParser; }; } // namespace aapt |