From cff10cec6cb6f406f71d42b064d527549cc0cca8 Mon Sep 17 00:00:00 2001 From: Iurii Makhno Date: Tue, 15 Feb 2022 19:33:50 +0000 Subject: Switch ResourceName to use ResourceNamedType instead of ResourceType. DD: go/custom-resource-types-in-aapt2 Bug: b/215108200 Test: Resource_test.cpp Change-Id: I0b97fc0024523700e01adce788bb934d388da288 --- tools/aapt2/ResourceParser.cpp | 53 ++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 22 deletions(-) (limited to 'tools/aapt2/ResourceParser.cpp') diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp index 792a3066f4f6..42715f9c3592 100644 --- a/tools/aapt2/ResourceParser.cpp +++ b/tools/aapt2/ResourceParser.cpp @@ -604,7 +604,8 @@ bool ResourceParser::ParseResource(xml::XmlPullParser* parser, return false; } - out_resource->name.type = ResourceType::kId; + out_resource->name.type = + ResourceNamedTypeWithDefaultName(ResourceType::kId).ToResourceNamedType(); out_resource->name.entry = maybe_name.value().to_string(); // Ids either represent a unique resource id or reference another resource id @@ -623,7 +624,7 @@ bool ResourceParser::ParseResource(xml::XmlPullParser* parser, // A null reference also means there is no inner element when ids are in the form: // out_resource->value = util::make_unique(); - } else if (!ref || ref->name.value().type != ResourceType::kId) { + } else if (!ref || ref->name.value().type.type != ResourceType::kId) { // If an inner element exists, the inner element must be a reference to another resource id diag_->Error(DiagMessage(out_resource->source) << "<" << parser->element_name() @@ -640,7 +641,8 @@ bool ResourceParser::ParseResource(xml::XmlPullParser* parser, return false; } - out_resource->name.type = ResourceType::kMacro; + out_resource->name.type = + ResourceNamedTypeWithDefaultName(ResourceType::kMacro).ToResourceNamedType(); out_resource->name.entry = maybe_name.value().to_string(); return ParseMacro(parser, out_resource); } @@ -656,7 +658,8 @@ bool ResourceParser::ParseResource(xml::XmlPullParser* parser, return false; } - out_resource->name.type = item_iter->second.type; + out_resource->name.type = + ResourceNamedTypeWithDefaultName(item_iter->second.type).ToResourceNamedType(); out_resource->name.entry = maybe_name.value().to_string(); // Only use the implied format of the type when there is no explicit format. @@ -699,7 +702,7 @@ bool ResourceParser::ParseResource(xml::XmlPullParser* parser, if (can_be_item) { // Try parsing the elementName (or type) as a resource. These shall only be // resources like 'layout' or 'xml' and they can only be references. - const ResourceType* parsed_type = ParseResourceType(resource_type); + std::optional parsed_type = ParseResourceNamedType(resource_type); if (parsed_type) { if (!maybe_name) { diag_->Error(DiagMessage(out_resource->source) @@ -708,7 +711,7 @@ bool ResourceParser::ParseResource(xml::XmlPullParser* parser, return false; } - out_resource->name.type = *parsed_type; + out_resource->name.type = parsed_type->ToResourceNamedType(); out_resource->name.entry = maybe_name.value().to_string(); out_resource->value = ParseXml(parser, android::ResTable_map::TYPE_REFERENCE, kNoRawString); if (!out_resource->value) { @@ -933,7 +936,7 @@ bool ResourceParser::ParsePublic(xml::XmlPullParser* parser, ParsedResource* out return false; } - const ResourceType* parsed_type = ParseResourceType(maybe_type.value()); + std::optional parsed_type = ParseResourceNamedType(maybe_type.value()); if (!parsed_type) { diag_->Error(DiagMessage(out_resource->source) << "invalid resource type '" << maybe_type.value() @@ -941,7 +944,7 @@ bool ResourceParser::ParsePublic(xml::XmlPullParser* parser, ParsedResource* out return false; } - out_resource->name.type = *parsed_type; + out_resource->name.type = parsed_type->ToResourceNamedType(); if (std::optional maybe_id_str = xml::FindNonEmptyAttribute(parser, "id")) { std::optional maybe_id = ResourceUtils::ParseResourceId(maybe_id_str.value()); @@ -953,7 +956,7 @@ bool ResourceParser::ParsePublic(xml::XmlPullParser* parser, ParsedResource* out out_resource->id = maybe_id.value(); } - if (*parsed_type == ResourceType::kId) { + if (parsed_type->type == ResourceType::kId) { // An ID marked as public is also the definition of an ID. out_resource->value = util::make_unique(); } @@ -978,7 +981,7 @@ bool static ParseGroupImpl(xml::XmlPullParser* parser, ParsedResource* out_resou return false; } - const ResourceType* parsed_type = ParseResourceType(maybe_type.value()); + std::optional parsed_type = ParseResourceNamedType(maybe_type.value()); if (!parsed_type) { diag->Error(DiagMessage(out_resource->source) << "invalid resource type '" << maybe_type.value() << "' in <" << tag_name << ">"); @@ -1096,7 +1099,7 @@ bool ResourceParser::ParseSymbolImpl(xml::XmlPullParser* parser, return false; } - const ResourceType* parsed_type = ParseResourceType(maybe_type.value()); + std::optional parsed_type = ParseResourceNamedType(maybe_type.value()); if (!parsed_type) { diag_->Error(DiagMessage(out_resource->source) << "invalid resource type '" << maybe_type.value() << "' in <" @@ -1104,7 +1107,7 @@ bool ResourceParser::ParseSymbolImpl(xml::XmlPullParser* parser, return false; } - out_resource->name.type = *parsed_type; + out_resource->name.type = parsed_type->ToResourceNamedType(); return true; } @@ -1208,8 +1211,8 @@ bool ResourceParser::ParseOverlayable(xml::XmlPullParser* parser, ParsedResource continue; } - const ResourceType* type = ParseResourceType(item_type.value()); - if (type == nullptr) { + std::optional type = ParseResourceNamedType(item_type.value()); + if (!type) { diag_->Error(DiagMessage(element_source) << "invalid resource type '" << item_type.value() << "' in within an "); @@ -1223,7 +1226,7 @@ bool ResourceParser::ParseOverlayable(xml::XmlPullParser* parser, ParsedResource overlayable_item.source = element_source; ParsedResource child_resource{}; - child_resource.name.type = *type; + child_resource.name.type = type->ToResourceNamedType(); child_resource.name.entry = item_name.value().to_string(); child_resource.overlayable_item = overlayable_item; out_resource->child_resources.push_back(std::move(child_resource)); @@ -1289,7 +1292,8 @@ bool ResourceParser::ParseAttr(xml::XmlPullParser* parser, bool ResourceParser::ParseAttrImpl(xml::XmlPullParser* parser, ParsedResource* out_resource, bool weak) { - out_resource->name.type = ResourceType::kAttr; + out_resource->name.type = + ResourceNamedTypeWithDefaultName(ResourceType::kAttr).ToResourceNamedType(); // Attributes only end up in default configuration. if (out_resource->config != ConfigDescription::DefaultConfig()) { @@ -1475,7 +1479,8 @@ std::optional ResourceParser::ParseEnumOrFlagItem(xml::XmlPul } return Attribute::Symbol{ - Reference(ResourceNameRef({}, ResourceType::kId, maybe_name.value())), + Reference(ResourceNameRef({}, ResourceNamedTypeWithDefaultName(ResourceType::kId), + maybe_name.value())), val.data, val.dataType}; } @@ -1509,7 +1514,7 @@ bool ResourceParser::ParseStyleItem(xml::XmlPullParser* parser, Style* style) { bool ResourceParser::ParseStyle(const ResourceType type, xml::XmlPullParser* parser, ParsedResource* out_resource) { - out_resource->name.type = type; + out_resource->name.type = ResourceNamedTypeWithDefaultName(type).ToResourceNamedType(); std::unique_ptr