From efcdb95fa7cf2da7d599e0bcda250514ac5ee048 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Wed, 14 Apr 2021 17:31:37 -0700 Subject: Aapt2 ValueTransformer For future macro support, aapt2 must be able to convert Reference values into other Value types. Currently a DescendingValueVisitor is used to visit all of the References in a ResourceTable or a compiled XML file to set their resource ids during the link phase. This was fine since we were only mutating the resource id of the visited Reference. A macro may reference a String, BinaryPrimitive, or any other Item type. During the link phase, we will need to transform references to macros into the values of the macros. The only parameter in the methods of the ValueVisitor interface is a raw pointer to the type being visited. The visitor interface does not support reassigning the visited type to a different type. ValueTransformer is a new interface for consuming a Value type and transforming it into a compatible Value type. This change refactors Value::Clone to use this interface. Bug: 175616308 Test: aapt2_tests Change-Id: Ic1b9d718b932c208764114cd9c74d880e189ccb0 --- tools/aapt2/java/JavaClassGenerator_test.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'tools/aapt2/java/JavaClassGenerator_test.cpp') diff --git a/tools/aapt2/java/JavaClassGenerator_test.cpp b/tools/aapt2/java/JavaClassGenerator_test.cpp index 8bb3ee93d312..d08b61e5ff66 100644 --- a/tools/aapt2/java/JavaClassGenerator_test.cpp +++ b/tools/aapt2/java/JavaClassGenerator_test.cpp @@ -334,11 +334,12 @@ TEST(JavaClassGeneratorTest, CommentsForStyleablesAndNestedAttributesArePresent) styleable.entries.push_back(Reference(test::ParseNameOrDie("android:attr/one"))); styleable.SetComment(StringPiece("This is a styleable")); + CloningValueTransformer cloner(nullptr); std::unique_ptr table = test::ResourceTableBuilder() .AddValue("android:attr/one", util::make_unique(attr)) .AddValue("android:styleable/Container", - std::unique_ptr(styleable.Clone(nullptr))) + std::unique_ptr(styleable.Transform(cloner))) .Build(); std::unique_ptr context = @@ -371,11 +372,12 @@ TEST(JavaClassGeneratorTest, CommentsForStyleableHiddenAttributesAreNotPresent) styleable.entries.push_back(Reference(test::ParseNameOrDie("android:attr/one"))); styleable.SetComment(StringPiece("This is a styleable")); + CloningValueTransformer cloner(nullptr); std::unique_ptr table = test::ResourceTableBuilder() .AddValue("android:attr/one", util::make_unique(attr)) .AddValue("android:styleable/Container", - std::unique_ptr(styleable.Clone(nullptr))) + std::unique_ptr(styleable.Transform(cloner))) .Build(); std::unique_ptr context = -- cgit v1.2.3