From ea93542e9007eba1eb04a6f3da7f344596b9967e Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Wed, 9 Mar 2022 14:51:17 +0000 Subject: [PATCH] Switch signature_to_elements to use tuple Previously, it used a structured string of format :. A tuple is more efficient and less prone to edge cases, such as when the value is a field signature which itself contains a ":". Bug: 202154151 Test: m out/soong/hiddenapi/hiddenapi-flags.csv atest --host signature_trie_test verify_overlaps_test pyformat -s 4 --force_quote_type double -i scripts/hiddenapi/signature_trie* /usr/bin/pylint --rcfile $ANDROID_BUILD_TOP/tools/repohooks/tools/pylintrc scripts/hiddenapi/signature_trie* Change-Id: I80abaff243d98aad325df1b5a655bba7f9d04e2c --- scripts/hiddenapi/signature_trie.py | 10 ++-- scripts/hiddenapi/signature_trie_test.py | 64 ++++++++++++------------ 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/scripts/hiddenapi/signature_trie.py b/scripts/hiddenapi/signature_trie.py index 2b0973adb..5871834c2 100644 --- a/scripts/hiddenapi/signature_trie.py +++ b/scripts/hiddenapi/signature_trie.py @@ -156,16 +156,16 @@ class InteriorNode(Node): # 3 - class:UnicodeScript # 4 - member:of(I)Ljava/lang/Character$UnicodeScript; return list( - chain([f"package:{x}" for x in packages], - [f"class:{x}" for x in classes], - [f"member:{x}" for x in member], - [f"wildcard:{x}" for x in wildcard])) + chain([("package", x) for x in packages], + [("class", x) for x in classes], + [("member", x) for x in member], + [("wildcard", x) for x in wildcard])) # pylint: enable=line-too-long @staticmethod def split_element(element): - element_type, element_value = element.split(":", 1) + element_type, element_value = element return element_type, element_value @staticmethod diff --git a/scripts/hiddenapi/signature_trie_test.py b/scripts/hiddenapi/signature_trie_test.py index 6bae08aa2..e9644efbc 100755 --- a/scripts/hiddenapi/signature_trie_test.py +++ b/scripts/hiddenapi/signature_trie_test.py @@ -29,34 +29,34 @@ class TestSignatureToElements(unittest.TestCase): def test_nested_inner_classes(self): elements = [ - "package:java", - "package:lang", - "class:ProcessBuilder", - "class:Redirect", - "class:1", - "member:()V", + ("package", "java"), + ("package", "lang"), + ("class", "ProcessBuilder"), + ("class", "Redirect"), + ("class", "1"), + ("member", "()V"), ] signature = "Ljava/lang/ProcessBuilder$Redirect$1;->()V" self.assertEqual(elements, self.signature_to_elements(signature)) def test_basic_member(self): elements = [ - "package:java", - "package:lang", - "class:Object", - "member:hashCode()I", + ("package", "java"), + ("package", "lang"), + ("class", "Object"), + ("member", "hashCode()I"), ] signature = "Ljava/lang/Object;->hashCode()I" self.assertEqual(elements, self.signature_to_elements(signature)) def test_double_dollar_class(self): elements = [ - "package:java", - "package:lang", - "class:CharSequence", - "class:", - "class:ExternalSyntheticLambda0", - "member:(Ljava/lang/CharSequence;)V", + ("package", "java"), + ("package", "lang"), + ("class", "CharSequence"), + ("class", ""), + ("class", "ExternalSyntheticLambda0"), + ("member", "(Ljava/lang/CharSequence;)V"), ] signature = "Ljava/lang/CharSequence$$ExternalSyntheticLambda0;" \ "->(Ljava/lang/CharSequence;)V" @@ -64,43 +64,43 @@ class TestSignatureToElements(unittest.TestCase): def test_no_member(self): elements = [ - "package:java", - "package:lang", - "class:CharSequence", - "class:", - "class:ExternalSyntheticLambda0", + ("package", "java"), + ("package", "lang"), + ("class", "CharSequence"), + ("class", ""), + ("class", "ExternalSyntheticLambda0"), ] signature = "Ljava/lang/CharSequence$$ExternalSyntheticLambda0" self.assertEqual(elements, self.signature_to_elements(signature)) def test_wildcard(self): elements = [ - "package:java", - "package:lang", - "wildcard:*", + ("package", "java"), + ("package", "lang"), + ("wildcard", "*"), ] signature = "java/lang/*" self.assertEqual(elements, self.signature_to_elements(signature)) def test_recursive_wildcard(self): elements = [ - "package:java", - "package:lang", - "wildcard:**", + ("package", "java"), + ("package", "lang"), + ("wildcard", "**"), ] signature = "java/lang/**" self.assertEqual(elements, self.signature_to_elements(signature)) def test_no_packages_wildcard(self): elements = [ - "wildcard:*", + ("wildcard", "*"), ] signature = "*" self.assertEqual(elements, self.signature_to_elements(signature)) def test_no_packages_recursive_wildcard(self): elements = [ - "wildcard:**", + ("wildcard", "**"), ] signature = "**" self.assertEqual(elements, self.signature_to_elements(signature)) @@ -115,9 +115,9 @@ class TestSignatureToElements(unittest.TestCase): def test_non_standard_class_name(self): elements = [ - "package:javax", - "package:crypto", - "class:extObjectInputStream", + ("package", "javax"), + ("package", "crypto"), + ("class", "extObjectInputStream"), ] signature = "Ljavax/crypto/extObjectInputStream" self.assertEqual(elements, self.signature_to_elements(signature))