Ignore comment lines in hidden api lists

It is sometimes useful to add comments at the top of a source file. This
patch changes hidden API list generation to ignore lines beginning with
a hash.

Note that due to the sorting constraints on hidden API lists, comments
can be only at the top of the files.

Test: m appcompat
Change-Id: I1bc6fd44d1b1f10a5adc45093d7f7ed5a0c5a54f
diff --git a/config/hiddenapi-dark-greylist.txt b/config/hiddenapi-dark-greylist.txt
index 87e3154..71e1e29 100644
--- a/config/hiddenapi-dark-greylist.txt
+++ b/config/hiddenapi-dark-greylist.txt
@@ -1,3 +1,7 @@
+#
+# DO NOT EDIT!
+# This is an autogenerated file containing the dark greylist as present in P.
+#
 Landroid/accessibilityservice/AccessibilityButtonController;-><init>(Landroid/accessibilityservice/IAccessibilityServiceConnection;)V
 Landroid/accessibilityservice/AccessibilityButtonController;->dispatchAccessibilityButtonAvailabilityChanged(Z)V
 Landroid/accessibilityservice/AccessibilityButtonController;->dispatchAccessibilityButtonClicked()V
diff --git a/tools/hiddenapi/generate_hiddenapi_lists.py b/tools/hiddenapi/generate_hiddenapi_lists.py
index ec72ece..c5fcb63 100755
--- a/tools/hiddenapi/generate_hiddenapi_lists.py
+++ b/tools/hiddenapi/generate_hiddenapi_lists.py
@@ -62,6 +62,8 @@
 def read_lines(filename):
     """Reads entire file and return it as a list of lines.
 
+    Lines which begin with a hash are ignored.
+
     Args:
         filename (string): Path to the file to read from.
 
@@ -69,7 +71,7 @@
         list: Lines of the loaded file as a list of strings.
     """
     with open(filename, 'r') as f:
-        return f.readlines()
+        return filter(lambda line: not line.startswith('#'), f.readlines())
 
 def write_lines(filename, lines):
     """Writes list of lines into a file, overwriting the file it it exists.
diff --git a/tools/hiddenapi/sort_api.sh b/tools/hiddenapi/sort_api.sh
index 1c6eb1b..bdcc807 100755
--- a/tools/hiddenapi/sort_api.sh
+++ b/tools/hiddenapi/sort_api.sh
@@ -11,8 +11,14 @@
 readarray A < "$source_list"
 # Sort
 IFS=$'\n'
+# Stash away comments
+C=( $(grep -E '^#' <<< "${A[*]}") )
+A=( $(grep -v -E '^#' <<< "${A[*]}") )
+# Sort entries
 A=( $(LC_COLLATE=C sort -f <<< "${A[*]}") )
 A=( $(uniq <<< "${A[*]}") )
+# Concatenate comments and entries
+A=( ${C[*]} ${A[*]} )
 unset IFS
 # Dump array back into the file
 printf '%s\n' "${A[@]}" > "$dest_list"