Introduce ResourceNamedType that represents pair of name + ResourceType.
This type will be used as part of ResourceName to support types with
custom names inside aapt2.
DD: go/custom-resource-types-in-aapt2
Bug: b/215108200
Test: Resource_test.cpp
Change-Id: Ib09776e6b2f69fefb9724136a345dc25bea42573
diff --git a/tools/aapt2/Resource.cpp b/tools/aapt2/Resource.cpp
index 6364ccd..0bb330e 100644
--- a/tools/aapt2/Resource.cpp
+++ b/tools/aapt2/Resource.cpp
@@ -134,6 +134,24 @@
{"xml", ResourceType::kXml},
};
+ResourceNamedTypeRef ResourceNamedTypeWithDefaultName(ResourceType t) {
+ return {to_string(t), t};
+}
+
+std::optional<ResourceNamedTypeRef> ParseResourceNamedType(const android::StringPiece& s) {
+ auto colon = std::find(s.begin(), s.end(), ':');
+ const ResourceType* parsedType;
+ if (colon != s.end() && colon != std::prev(s.end())) {
+ parsedType = ParseResourceType(s.substr(s.begin(), colon));
+ } else {
+ parsedType = ParseResourceType(s);
+ }
+ if (parsedType == nullptr) {
+ return std::nullopt;
+ }
+ return ResourceNamedTypeRef(s, *parsedType);
+}
+
const ResourceType* ParseResourceType(const StringPiece& str) {
auto iter = sResourceTypeMap.find(str);
if (iter == std::end(sResourceTypeMap)) {