Make signature_to_elements stricter and more consistent

Previously, signature_to_elements would return a string array where
non-wildcard strings were of the form <type>:<value> but wildcard
strings were just * or **. This change makes it handle wildcards
consistently with the other element types and adds some extra
checking for edge cases.

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: I5bfaf5e75c7da54b6241f68e03231939c9d65501
diff --git a/scripts/hiddenapi/signature_trie_test.py b/scripts/hiddenapi/signature_trie_test.py
index 2dc79d0..6bae08a 100755
--- a/scripts/hiddenapi/signature_trie_test.py
+++ b/scripts/hiddenapi/signature_trie_test.py
@@ -77,7 +77,7 @@
         elements = [
             "package:java",
             "package:lang",
-            "*",
+            "wildcard:*",
         ]
         signature = "java/lang/*"
         self.assertEqual(elements, self.signature_to_elements(signature))
@@ -86,25 +86,33 @@
         elements = [
             "package:java",
             "package:lang",
-            "**",
+            "wildcard:**",
         ]
         signature = "java/lang/**"
         self.assertEqual(elements, self.signature_to_elements(signature))
 
     def test_no_packages_wildcard(self):
         elements = [
-            "*",
+            "wildcard:*",
         ]
         signature = "*"
         self.assertEqual(elements, self.signature_to_elements(signature))
 
     def test_no_packages_recursive_wildcard(self):
         elements = [
-            "**",
+            "wildcard:**",
         ]
         signature = "**"
         self.assertEqual(elements, self.signature_to_elements(signature))
 
+    def test_invalid_no_class_or_wildcard(self):
+        signature = "java/lang"
+        with self.assertRaises(Exception) as context:
+            self.signature_to_elements(signature)
+        self.assertIn(
+            "last element 'lang' is lower case but should be an "
+            "upper case class name or wildcard", str(context.exception))
+
     def test_non_standard_class_name(self):
         elements = [
             "package:javax",
@@ -114,12 +122,19 @@
         signature = "Ljavax/crypto/extObjectInputStream"
         self.assertEqual(elements, self.signature_to_elements(signature))
 
+    def test_invalid_pattern_wildcard(self):
+        pattern = "Ljava/lang/Class*"
+        with self.assertRaises(Exception) as context:
+            self.signature_to_elements(pattern)
+        self.assertIn("invalid wildcard 'Class*'", str(context.exception))
+
     def test_invalid_pattern_wildcard_and_member(self):
         pattern = "Ljava/lang/*;->hashCode()I"
         with self.assertRaises(Exception) as context:
             self.signature_to_elements(pattern)
-        self.assertIn("contains wildcard * and member signature hashCode()I",
-                      str(context.exception))
+        self.assertIn(
+            "contains wildcard '*' and member signature 'hashCode()I'",
+            str(context.exception))
 
 
 class TestGetMatchingRows(unittest.TestCase):