summaryrefslogtreecommitdiff
path: root/tools/aapt2/ResourceParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt2/ResourceParser.cpp')
-rw-r--r--tools/aapt2/ResourceParser.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp
index 981ece709778..f2a1878d0dc5 100644
--- a/tools/aapt2/ResourceParser.cpp
+++ b/tools/aapt2/ResourceParser.cpp
@@ -346,8 +346,21 @@ bool ResourceParser::parseResources(XmlPullParser* parser) {
} else if (elementName == u"public-group") {
result = parsePublicGroup(parser, &parsedResource);
} else {
- mDiag->warn(DiagMessage(mSource.withLine(parser->getLineNumber()))
- << "unknown resource type '" << elementName << "'");
+ // Try parsing the elementName (or type) as a resource. These shall only be
+ // resources like 'layout' or 'xml' and they can only be references.
+ if (const ResourceType* type = parseResourceType(elementName)) {
+ parsedResource.name.type = *type;
+ parsedResource.value = parseXml(parser, android::ResTable_map::TYPE_REFERENCE,
+ false);
+ if (!parsedResource.value) {
+ mDiag->error(DiagMessage(parsedResource.source) << "invalid value for type '"
+ << *type << "'. Expected a reference");
+ result = false;
+ }
+ } else {
+ mDiag->warn(DiagMessage(mSource.withLine(parser->getLineNumber()))
+ << "unknown resource type '" << elementName << "'");
+ }
}
if (result) {