Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 400136e0 authored by Adam Lesinski's avatar Adam Lesinski Committed by Android (Google) Code Review
Browse files

Merge "AAPT2: Accept aliases defined for external resource types"

parents caf4a89f fa10505c
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -345,10 +345,23 @@ bool ResourceParser::parseResources(XmlPullParser* parser) {
            result = parseSymbol(parser, &parsedResource);
        } else if (elementName == u"public-group") {
            result = parsePublicGroup(parser, &parsedResource);
        } else {
            // 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) {
            // We successfully parsed the resource.
+8 −0
Original line number Diff line number Diff line
@@ -521,4 +521,12 @@ TEST_F(ResourceParserTest, AutoIncrementIdsInPublicGroup) {
    EXPECT_EQ(ResourceId(0x01010041), actualId);
}

TEST_F(ResourceParserTest, ExternalTypesShouldOnlyBeReferences) {
    std::string input = R"EOF(<item type="layout" name="foo">@layout/bar</item>)EOF";
    ASSERT_TRUE(testParse(input));

    input = R"EOF(<item type="layout" name="bar">"this is a string"</item>)EOF";
    ASSERT_FALSE(testParse(input));
}

} // namespace aapt