Merge "Remove member signature and inner classes from signature-patterns.csv"
diff --git a/scripts/hiddenapi/signature_patterns.py b/scripts/hiddenapi/signature_patterns.py
index 91328e6..a7c5bb4 100755
--- a/scripts/hiddenapi/signature_patterns.py
+++ b/scripts/hiddenapi/signature_patterns.py
@@ -30,11 +30,21 @@
         return produce_patterns_from_stream(f)
 
 def produce_patterns_from_stream(stream):
-    patterns = []
-    allFlagsReader = dict_reader(stream)
-    for row in allFlagsReader:
+    # Read in all the signatures into a list and remove member names.
+    patterns = set()
+    for row in dict_reader(stream):
         signature = row['signature']
-        patterns.append(signature)
+        text = signature.removeprefix("L")
+        # Remove the class specific member signature
+        pieces = text.split(";->")
+        qualifiedClassName = pieces[0]
+            # Remove inner class names as they cannot be separated from the containing outer class.
+        pieces = qualifiedClassName.split("$", maxsplit=1)
+        pattern = pieces[0]
+        patterns.add(pattern)
+
+    patterns = list(patterns)
+    patterns.sort()
     return patterns
 
 def main(args):
diff --git a/scripts/hiddenapi/signature_patterns_test.py b/scripts/hiddenapi/signature_patterns_test.py
index 83c9db2..0431f45 100755
--- a/scripts/hiddenapi/signature_patterns_test.py
+++ b/scripts/hiddenapi/signature_patterns_test.py
@@ -28,12 +28,15 @@
 
     def test_generate(self):
         patterns = self.produce_patterns_from_string('''
+Ljava/lang/ProcessBuilder$Redirect$1;-><init>()V,blocked
+Ljava/lang/Character$UnicodeScript;->of(I)Ljava/lang/Character$UnicodeScript;,public-api
 Ljava/lang/Object;->hashCode()I,public-api,system-api,test-api
 Ljava/lang/Object;->toString()Ljava/lang/String;,blocked
 ''')
         expected = [
-            "Ljava/lang/Object;->hashCode()I",
-            "Ljava/lang/Object;->toString()Ljava/lang/String;",
+            "java/lang/Character",
+            "java/lang/Object",
+            "java/lang/ProcessBuilder",
         ]
         self.assertEqual(expected, patterns)