diff options
Diffstat (limited to 'tools/aapt2/java')
-rw-r--r-- | tools/aapt2/java/JavaClassGenerator.cpp | 7 | ||||
-rw-r--r-- | tools/aapt2/java/JavaClassGenerator_test.cpp | 35 |
2 files changed, 37 insertions, 5 deletions
diff --git a/tools/aapt2/java/JavaClassGenerator.cpp b/tools/aapt2/java/JavaClassGenerator.cpp index bb541fe2490b..0869c570f5d6 100644 --- a/tools/aapt2/java/JavaClassGenerator.cpp +++ b/tools/aapt2/java/JavaClassGenerator.cpp @@ -218,13 +218,10 @@ struct StyleableAttr { static bool operator<(const StyleableAttr& lhs, const StyleableAttr& rhs) { const ResourceId lhs_id = lhs.attr_ref->id.value_or_default(ResourceId(0)); const ResourceId rhs_id = rhs.attr_ref->id.value_or_default(ResourceId(0)); - if (lhs_id < rhs_id) { - return true; - } else if (lhs_id > rhs_id) { - return false; - } else { + if (lhs_id == rhs_id) { return lhs.attr_ref->name.value() < rhs.attr_ref->name.value(); } + return cmp_ids_dynamic_after_framework(lhs_id, rhs_id); } void JavaClassGenerator::ProcessStyleable(const ResourceNameRef& name, const ResourceId& id, diff --git a/tools/aapt2/java/JavaClassGenerator_test.cpp b/tools/aapt2/java/JavaClassGenerator_test.cpp index 1e1fe4740c6b..04e20101a0dd 100644 --- a/tools/aapt2/java/JavaClassGenerator_test.cpp +++ b/tools/aapt2/java/JavaClassGenerator_test.cpp @@ -551,4 +551,39 @@ TEST(JavaClassGeneratorTest, OnlyGenerateRText) { ASSERT_TRUE(generator.Generate("android", nullptr)); } +TEST(JavaClassGeneratorTest, SortsDynamicAttributesAfterFrameworkAttributes) { + std::unique_ptr<ResourceTable> table = + test::ResourceTableBuilder() + .SetPackageId("android", 0x01) + .SetPackageId("lib", 0x00) + .AddValue("android:attr/framework_attr", ResourceId(0x01010000), + test::AttributeBuilder().Build()) + .AddValue("lib:attr/dynamic_attr", ResourceId(0x00010000), + test::AttributeBuilder().Build()) + .AddValue("lib:styleable/MyStyleable", ResourceId(0x00030000), + test::StyleableBuilder() + .AddItem("android:attr/framework_attr", ResourceId(0x01010000)) + .AddItem("lib:attr/dynamic_attr", ResourceId(0x00010000)) + .Build()) + .Build(); + + std::unique_ptr<IAaptContext> context = + test::ContextBuilder() + .AddSymbolSource(util::make_unique<ResourceTableSymbolSource>(table.get())) + .SetNameManglerPolicy(NameManglerPolicy{"custom"}) + .SetCompilationPackage("custom") + .Build(); + JavaClassGenerator generator(context.get(), table.get(), {}); + + std::string output; + StringOutputStream out(&output); + EXPECT_TRUE(generator.Generate("lib", &out)); + out.Flush(); + + EXPECT_THAT(output, HasSubstr("public static final int[] MyStyleable={")); + EXPECT_THAT(output, HasSubstr("0x01010000, 0x00010000")); + EXPECT_THAT(output, HasSubstr("public static final int MyStyleable_android_framework_attr=0;")); + EXPECT_THAT(output, HasSubstr("public static final int MyStyleable_dynamic_attr=1;")); +} + } // namespace aapt |