Detect non-static abstract inner classes.

Test: script detects issue
Bug: 32982018
Change-Id: I4e3521bf603f6272bfe5583e3d4977dd5b59afe8
diff --git a/tools/apilint/apilint.py b/tools/apilint/apilint.py
index 6ca59b0..48a1330 100644
--- a/tools/apilint/apilint.py
+++ b/tools/apilint/apilint.py
@@ -990,6 +990,14 @@
             warn(clazz, m, None, "Methods should return List<? extends Parcelable> instead of Parcelable[] to support ParceledListSlice under the hood")
 
 
+def verify_abstract_inner(clazz):
+    """Verifies that abstract inner classes are static."""
+
+    if re.match(".+?\.[A-Z][^\.]+\.[A-Z]", clazz.fullname):
+        if " abstract " in clazz.raw and " static " not in clazz.raw:
+            warn(clazz, None, None, "Abstract inner classes should be static to improve testability")
+
+
 def examine_clazz(clazz):
     """Find all style issues in the given class."""
     if clazz.pkg.name.startswith("java"): return
@@ -1036,6 +1044,7 @@
     verify_resource_names(clazz)
     verify_files(clazz)
     verify_manager_list(clazz)
+    verify_abstract_inner(clazz)
 
 
 def examine_stream(stream):