Null annotations for java.util.List

Test: make docs
Bug: 64930165
Change-Id: If1be70ccfc5dc511b6571512ede1d34b3250c1c9
diff --git a/annotated_java_files.bp b/annotated_java_files.bp
index d4aa37d..03940f9 100644
--- a/annotated_java_files.bp
+++ b/annotated_java_files.bp
@@ -24,5 +24,6 @@
         "ojluni/src/main/java/java/lang/reflect/Type.java",
         "ojluni/src/main/java/java/lang/reflect/TypeVariable.java",
         "ojluni/src/main/java/java/lang/reflect/WildcardType.java",
+        "ojluni/src/main/java/java/util/List.java",
     ],
 }
diff --git a/annotations/ojluni.jaif b/annotations/ojluni.jaif
index a4b7996..1c932cf 100644
--- a/annotations/ojluni.jaif
+++ b/annotations/ojluni.jaif
@@ -27,6 +27,11 @@
 //    type: @libcore.util.NonNull
 //      inner-type 0, 0: @libcore.util.Nullable
 
+// There are some comment shortcuts used below for brevity:
+//
+// CLASS_TYPE_PARAMETER(X)
+//   - used when nullability is deliberately left floating; the nullability is the same as the
+//     type parameter X of the class.
 
 package libcore.util:
 annotation @NonNull: @java.lang.annotation.Retention(value=SOURCE) @java.lang.annotation.Target(value={TYPE_USE})
@@ -598,9 +603,111 @@
 class WildcardType:
     // Empty array in the worst case
     method getUpperBounds()[Ljava/lang/reflect/Type;:
-        return:  @libcore.util.NonNull
+        return: @libcore.util.NonNull
           inner-type 0, 0:  @libcore.util.NonNull
     // Empty array in the worst case
     method getLowerBounds()[Ljava/lang/reflect/Type;:
         return:  @libcore.util.NonNull
           inner-type 0, 0:  @libcore.util.NonNull
+
+package java.util:
+
+class List:
+    method contains(Ljava/lang/Object;)Z:
+        // May be null
+        parameter #0:
+          type: @libcore.util.Nullable
+        return:
+    method iterator()Ljava/util/Iterator;:
+        // Javadoc doesn't mention possiblity of a null result
+        return: @libcore.util.NonNull
+    method toArray()[Ljava/lang/Object;:
+        // Never returns null
+        return: @libcore.util.NonNull
+    method toArray([Ljava/lang/Object;)[Ljava/lang/Object;:
+        // Javadoc mention NPE for param #0
+        parameter #0:
+          type: @libcore.util.NonNull
+        // Never returns null
+        return: @libcore.util.NonNull
+    // boolean add(E e); CLASS_TYPE_PARAMETER(E)
+    method add(Ljava/lang/Object;)Z:
+        return:
+    method remove(Ljava/lang/Object;)Z:
+        // param #0 has to allow nulls
+        parameter #0:
+          type: @libcore.util.Nullable
+        return:
+    method containsAll(Ljava/util/Collection;)Z:
+        // Javadoc mention NPE for null param #0
+        parameter #0:
+          type: @libcore.util.NonNull
+          inner-type 3, 0: @libcore.util.Nullable
+        return:
+    method addAll(Ljava/util/Collection;)Z:
+        // Javadoc mention NPE for null param #0
+        parameter #0:
+          type: @libcore.util.NonNull
+          // boolean addAll(Collection<? extends E> c); CLASS_TYPE_PARAMETER(E)
+          inner-type 3, 0:
+        return:
+    method addAll(ILjava/util/Collection;)Z:
+        // Javadoc mention NPE for null param #1
+        parameter #1:
+          type: @libcore.util.NonNull
+          // boolean addAll(Collection<? extends E> c); CLASS_TYPE_PARAMETER(E)
+          inner-type 3, 0:
+        return:
+    method removeAll(Ljava/util/Collection;)Z:
+        // Javadoc mention NPE for null param #0
+        parameter #0:
+          type: @libcore.util.NonNull
+    method retainAll(Ljava/util/Collection;)Z:
+        // Javadoc mention NPE for null param #0
+        parameter #0:
+          type: @libcore.util.NonNull
+    method replaceAll(Ljava/util/function/UnaryOperator;)V:
+        // Javadoc mention NPE for null param #0
+        parameter #0:
+          type: @libcore.util.NonNull
+    method sort(Ljava/util/Comparator;)V:
+        // Javadoc mention null as valid param #0
+        parameter #0:
+          type: @libcore.util.Nullable
+    method equals(Ljava/lang/Object;)Z:
+        // Null is valid argument #0
+        parameter #0:
+          type: @libcore.util.Nullable
+    method get(I)Ljava/lang/Object;:
+        // E get(int index); CLASS_TYPE_PARAMETER(E)
+        return:
+    // E set(int index, E element); CLASS_TYPE_PARAMETER(E)
+    method set(ILjava/lang/Object;)Ljava/lang/Object;:
+        return:
+    method add(ILjava/lang/Object;)V:
+        // void add(int index, E element); CLASS_TYPE_PARAMETER(E)
+        parameter #1:
+        return:
+    method remove(I)Ljava/lang/Object;:
+        // E remove(int index); CLASS_TYPE_PARAMETER(E)
+        return:
+    method indexOf(Ljava/lang/Object;)I:
+        // Null is valid argument
+        parameter #0:
+          type: @libcore.util.Nullable
+    method lastIndexOf(Ljava/lang/Object;)I:
+        // Null is valid argument
+        parameter #0:
+          type: @libcore.util.Nullable
+    method listIterator()Ljava/util/ListIterator;:
+        // Javadoc doesn't mention possiblity of a null result
+        return: @libcore.util.NonNull
+    method listIterator(I)Ljava/util/ListIterator;:
+        // Javadoc doesn't mention possiblity of a null result
+        return: @libcore.util.NonNull
+    method subList(II)Ljava/util/List;:
+         // Javadoc doesn't mention possiblity of a null result
+        return: @libcore.util.NonNull
+    method spliterator()Ljava/util/Spliterator;:
+        // Javadoc doesn't mention possiblity of a null result
+        return: @libcore.util.NonNull