//
// Copyright (C) 2017 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file specifies additional annotations that are applied to libcore
// code before generating android stubs and documentation. This data
// is human-maintained and is based on jdk annotations shipped in Android
// Studio.

// If this file is changed, please update libcore/annotated_java_files.bp file by running:
// libcore/annotations/generate_annotated_java_files.py libcore/annotations/ojluni.jaif > libcore/annotated_java_files.bp
//
// For arrray syntax, please see https://checkerframework.org/jsr308/specification/java-annotation-design.html#array-syntax
// @Nullable String @NonNull[] <- Non-null array of nullable strings can be expressed as:
//
//    type: @libcore.util.NonNull
//      inner-type 0, 0: @libcore.util.Nullable

package libcore.util:
annotation @NonNull: @java.lang.annotation.Retention(value=SOURCE) @java.lang.annotation.Target(value={TYPE_USE})
    int from
    int to
annotation @Nullable: @java.lang.annotation.Retention(value=SOURCE) @java.lang.annotation.Target(value={TYPE_USE})
    int from
    int to
annotation @NullFromTypeParam: @java.lang.annotation.Retention(value=SOURCE) @java.lang.annotation.Target(value={TYPE_USE})
    int from
    int to

package java.lang:
class Appendable:
    method append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;:
        parameter #0:
          type: @libcore.util.Nullable
        // Is expected to return self
        return: @libcore.util.NonNull

    method append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;:
        parameter #0:
          type: @libcore.util.Nullable
        // Is expected to return self
        return: @libcore.util.NonNull

    method append(C)Ljava/lang/Appendable;:
        // Is expected to return self
        return: @libcore.util.NonNull

class Boolean:
    method <init>(Ljava/lang/String;)V:
        // In contrast to other type classes, doesn't NPE on null, but sets value to false
        parameter #0:
          type: @libcore.util.Nullable

    method parseBoolean(Ljava/lang/String;)Z:
        // In contrast to other type classes, doesn't NPE on null, but sets value to false
        parameter #0:
          type: @libcore.util.Nullable

    method valueOf(Z)Ljava/lang/Boolean;:
        // Always return value
        return: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;)Ljava/lang/Boolean;:
        // Null == false
        parameter #0:
          type: @libcore.util.Nullable
        // Always return value
        return: @libcore.util.NonNull

    method toString(Z)Ljava/lang/String;:
        // Always return value
        return: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Always return value
        return: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method getBoolean(Ljava/lang/String;)Z:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Returns null in case of failure
        return: @libcore.util.Nullable

    method compareTo(Ljava/lang/Boolean;)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

class Byte:
    method toString(B)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(B)Ljava/lang/Byte;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method parseByte(Ljava/lang/String;I)B:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method parseByte(Ljava/lang/String;)B:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;I)Ljava/lang/Byte;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;)Ljava/lang/Byte;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method decode(Ljava/lang/String;)Ljava/lang/Byte;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        return:
        // Always returns an instance
        return: @libcore.util.NonNull

    method <init>(Ljava/lang/String;)V:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method compareTo(Ljava/lang/Byte;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method toHexString(BZ)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

class Character:
    method valueOf(C)Ljava/lang/Character;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method toString()Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toString(C)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method codePointAt(Ljava/lang/CharSequence;I)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method codePointAt([CI)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method codePointAt([CII)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method codePointBefore(Ljava/lang/CharSequence;I)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method codePointBefore([CI)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method codePointBefore([CII)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method toChars(I[CI)I:
        // throws NPE
        parameter #1:
          type: @libcore.util.NonNull

    method toChars(I)[C:
        // Always returns an instance
        return: @libcore.util.NonNull

    method codePointCount(Ljava/lang/CharSequence;II)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method codePointCount([CII)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method offsetByCodePoints(Ljava/lang/CharSequence;II)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method offsetByCodePoints([CIIII)I:
        // throws NPE
        parameter #0:
          type: @libcore.util.NonNull

    method compareTo(Ljava/lang/Character;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method getName(I)Ljava/lang/String;:
        // Null is a valid return value
        return: @libcore.util.Nullable

class Character$Subset:
    method <init>(Ljava/lang/String;)V:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method hashCode()I:
        return:

    method toString()Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

class Character$UnicodeBlock:
    method of(C)Ljava/lang/Character$UnicodeBlock;:
        // Null is valid return value
        return: @libcore.util.Nullable

    method of(I)Ljava/lang/Character$UnicodeBlock;:
        // Null is valid return value
        return: @libcore.util.Nullable

    method forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeBlock;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

class Character$UnicodeScript:
    method of(I)Ljava/lang/Character$UnicodeScript;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeScript;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

class CharSequence:
    // Always returns a string instance
    method toString()Ljava/lang/String;:
        return: @libcore.util.NonNull

class Enum:
    // Always returns an instance or throws
    method valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;:
        return: @libcore.util.NonNull

class Iterable:
    // Always returns an instance
    method iterator()Ljava/util/Iterator;:
        return: @libcore.util.NonNull

class Integer:
    method toString(II)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toUnsignedString(II)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toHexString(I)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toOctalString(I)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toBinaryString(I)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toString(I)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toUnsignedString(I)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

   method parseInt(Ljava/lang/String;I)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method parseInt(Ljava/lang/String;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method parseUnsignedInt(Ljava/lang/String;I)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method parseUnsignedInt(Ljava/lang/String;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;I)Ljava/lang/Integer;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;)Ljava/lang/Integer;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(I)Ljava/lang/Integer;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method <init>(Ljava/lang/String;)V:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method getInteger(Ljava/lang/String;)Ljava/lang/Integer;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Returns null in case of failure
        return: @libcore.util.Nullable

    method getInteger(Ljava/lang/String;I)Ljava/lang/Integer;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Returns null in case of failure
        return: @libcore.util.Nullable

    method getInteger(Ljava/lang/String;Ljava/lang/Integer;)Ljava/lang/Integer;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Can be null
        parameter #1:
          type: @libcore.util.Nullable
        // Returns null in case of failure
        return: @libcore.util.Nullable

    method decode(Ljava/lang/String;)Ljava/lang/Integer;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        return:
        // Always returns an instance
        return: @libcore.util.NonNull

    method compareTo(Ljava/lang/Integer;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

class Float:
    method toString(F)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toHexString(F)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;)Ljava/lang/Float;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(F)Ljava/lang/Float;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method parseFloat(Ljava/lang/String;)F:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method <init>(Ljava/lang/String;)V:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method compareTo(Ljava/lang/Float;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

class Double:
    method toString(D)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toHexString(D)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;)Ljava/lang/Double;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(D)Ljava/lang/Double;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method parseDouble(Ljava/lang/String;)D:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method <init>(Ljava/lang/String;)V:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method compareTo(Ljava/lang/Double;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

class Long:
    method toString(JI)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toUnsignedString(JI)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toHexString(J)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toOctalString(J)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toBinaryString(J)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toString(J)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method toUnsignedString(J)Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method parseLong(Ljava/lang/String;I)J:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method parseLong(Ljava/lang/String;)J:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method parseUnsignedLong(Ljava/lang/String;I)J:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method parseUnsignedLong(Ljava/lang/String;)J:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;I)Ljava/lang/Long;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(Ljava/lang/String;)Ljava/lang/Long;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Always returns an instance
        return: @libcore.util.NonNull

    method valueOf(J)Ljava/lang/Long;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method decode(Ljava/lang/String;)Ljava/lang/Long;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        return:
        // Always returns an instance
        return: @libcore.util.NonNull

    method <init>(Ljava/lang/String;)V:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Always returns an instance
        return: @libcore.util.NonNull

    method equals(Ljava/lang/Object;)Z:
        // Can be null
        parameter #0:
          type: @libcore.util.Nullable

    method getLong(Ljava/lang/String;)Ljava/lang/Long;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Returns null in case of failure
        return: @libcore.util.Nullable

    method getLong(Ljava/lang/String;J)Ljava/lang/Long;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Returns null in case of failure
        return: @libcore.util.Nullable

    method getLong(Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long;:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull
        // Can be null
        parameter #1:
          type: @libcore.util.Nullable
        // Returns null in case of failure
        return: @libcore.util.Nullable

    method compareTo(Ljava/lang/Long;)I:
        // Throws NPE on null
        parameter #0:
          type: @libcore.util.NonNull

class String:
    method <init>(Ljava/lang/String;)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>([C)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>([CII)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>([III)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>([BIII)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>([BI)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>([BIILjava/lang/String;)V:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #3:
          type: @libcore.util.NonNull
        return:
    method <init>([BIILjava/nio/charset/Charset;)V:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #3:
          type: @libcore.util.NonNull
        return:
    method <init>([BLjava/lang/String;)V:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
          type: @libcore.util.NonNull
        return:
    method <init>([BLjava/nio/charset/Charset;)V:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
          type: @libcore.util.NonNull
        return:
    method <init>([BII)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>([B)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>(Ljava/lang/StringBuffer;)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>(Ljava/lang/StringBuilder;)V:
        parameter #0:
          type: @libcore.util.NonNull
        return:
    method <init>(II[C)V:
        parameter #2:
          type: @libcore.util.NonNull
        return:
    method getChars(II[CI)V:
        parameter #2:
          type: @libcore.util.NonNull
        return:

    // Always returns a string instance
    method toString()Ljava/lang/String;:
        return: @libcore.util.NonNull

    method getBytes(II[BI)V:
        parameter #2:
          type: @libcore.util.NonNull
    // Empty array in worst case
    method getBytes(Ljava/lang/String;)[B:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Empty array in worst case
    method getBytes(Ljava/nio/charset/Charset;)[B:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Empty array in worst case (or throws)
    method getBytes(Ljava/lang/String;)[B:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Empty array in worst case
    method getBytes()[B:
        return: @libcore.util.NonNull
    method equals(Ljava/lang/Object;)Z:
        parameter #0:
          type: @libcore.util.Nullable
    // Empty array in worst case
    method toCharArray()[C:
        return: @libcore.util.NonNull
    // Empty char sequence in worst case
    method subSequence(II)Ljava/lang/CharSequence;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method concat(Ljava/lang/String;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method copyValueOf([CII)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method copyValueOf([C)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method intern()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method replace(CC)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method substring(I)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method substring(II)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method toLowerCase(Ljava/util/Locale;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method toLowerCase()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method toUpperCase(Ljava/util/Locale;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method toUpperCase()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method trim()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf(Z)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf(C)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf(I)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf(J)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf(F)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf(D)Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf(Ljava/lang/Object;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.Nullable
        return:@libcore.util.NonNull
    // Always returns a string instance
    method valueOf([C)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method valueOf([CII)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method split(Ljava/lang/String;I)[Ljava/lang/String;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
    // Always returns a string instance
    method split(Ljava/lang/String;)[Ljava/lang/String;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
    // Always returns a string instance
    method join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable
    // Always returns a string instance
    method join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.NonNull
            inner-type 3, 0, 2, 0: @libcore.util.Nullable
        return: @libcore.util.NonNull
    // Always returns a string instance
    method replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    // Always returns a string instance
    method replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
   method replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
          type: @libcore.util.NonNull
        return: @libcore.util.NonNull
    method contentEquals(Ljava/lang/StringBuffer;)Z:
        parameter #0:
          type: @libcore.util.NonNull
    method contentEquals(Ljava/lang/CharSequence;)Z:
        parameter #0:
          type: @libcore.util.NonNull
    method equalsIgnoreCase(Ljava/lang/String;)Z:
        parameter #0:
          type: @libcore.util.Nullable
    method compareTo(Ljava/lang/String;)I:
        parameter #0:
          type: @libcore.util.NonNull
    method compareToIgnoreCase(Ljava/lang/String;)I:
        parameter #0:
          type: @libcore.util.NonNull
    method regionMatches(ILjava/lang/String;II)Z:
        parameter #1:
          type: @libcore.util.NonNull
    method regionMatches(ZILjava/lang/String;II)Z:
        parameter #2:
          type: @libcore.util.NonNull
    method startsWith(Ljava/lang/String;I)Z:
        parameter #0:
          type: @libcore.util.NonNull
    method startsWith(Ljava/lang/String;)Z:
        parameter #0:
          type: @libcore.util.NonNull
    method endsWith(Ljava/lang/String;)Z:
        parameter #0:
          type: @libcore.util.NonNull
    method indexOf(Ljava/lang/String;)I:
        parameter #0:
          type: @libcore.util.NonNull
    method indexOf(Ljava/lang/String;I)I:
        parameter #0:
          type: @libcore.util.NonNull
    method lastIndexOf(Ljava/lang/String;)I:
        parameter #0:
          type: @libcore.util.NonNull
    method lastIndexOf(Ljava/lang/String;I)I:
        parameter #0:
          type: @libcore.util.NonNull
    method matches(Ljava/lang/String;)Z:
        parameter #0:
          type: @libcore.util.NonNull
    method contains(Ljava/lang/CharSequence;)Z:
        parameter #0:
          type: @libcore.util.NonNull
    method format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable
        return: @libcore.util.NonNull
    method format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;:
        parameter #0:
          type: @libcore.util.NonNull
        parameter #1:
          type: @libcore.util.NonNull
        parameter #2:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable
        return: @libcore.util.NonNull

class System:
    // Ideally, in should be made NonNull - but it IS possible to make this final field
    // a null using setIn(null). It makes sense to leave this field as a platform
    // type for convenience reasons - no one sane should expect this to be null,
    // but it's nice to have kotlin check it.
    field in:

    // Same as in "in" field
    field out:

    // Same as in "in" field
    field err:


    method setIn(Ljava/io/InputStream;)V:
        // While it makes little sense, it's possible to set System.in to null.
        parameter #0:
          type: @libcore.util.Nullable

    method setOut(Ljava/io/PrintStream;)V:
        // While it makes little sense, it's possible to set System.out to null.
        parameter #0:
          type: @libcore.util.Nullable

    method setErr(Ljava/io/PrintStream;)V:
        // While it makes little sense, it's possible to set System.err to null.
        parameter #0:
          type: @libcore.util.Nullable

    method console()Ljava/io/Console;:
        // Always returns an instance
        return: @libcore.util.Nullable

    method inheritedChannel()Ljava/nio/channels/Channel;:
        // Null if there's no inherited channel
        return: @libcore.util.Nullable

    method setSecurityManager(Ljava/lang/SecurityManager;)V:
        // Null is a valid argument.
        parameter #0:
          type: @libcore.util.Nullable

    method getSecurityManager()Ljava/lang/SecurityManager;:
        // Null is valid return value.
        return: @libcore.util.Nullable

    method arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V:
        // NPE on null src
        parameter #0:
          type: @libcore.util.NonNull
        // NPE on null dst
        parameter #1:
          type: @libcore.util.NonNull

    method identityHashCode(Ljava/lang/Object;)I:
        // Null is a valid argument.
        parameter #0:
          type: @libcore.util.Nullable

    method getProperties()Ljava/util/Properties;:
        // There's always a properties object
        return: @libcore.util.NonNull

    method lineSeparator()Ljava/lang/String;:
        // There's always a line separator string (empty in worst case)
        return: @libcore.util.NonNull

    method setProperties(Ljava/util/Properties;)V:
        // Null is a valid argument (will reset to defaults)
        parameter #0:
          type: @libcore.util.Nullable

    method getProperty(Ljava/lang/String;)Ljava/lang/String;:
        // Property key can't be null
        parameter #0:
          type: @libcore.util.NonNull
        // Null is valid return value
        return: @libcore.util.Nullable

    method getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:
        // Property key can't be null
        parameter #0:
          type: @libcore.util.NonNull
        // Property value can be null
        parameter #1:
          type: @libcore.util.Nullable
        // Null is valid return value
        return: @libcore.util.Nullable

    method setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:
        // Property key can't be null
        parameter #0:
          type: @libcore.util.NonNull
        // Property value can be null
        parameter #1:
          type: @libcore.util.Nullable
        // Null is valid return value
        return: @libcore.util.Nullable

    method clearProperty(Ljava/lang/String;)Ljava/lang/String;:
        // Property key can't be null
        parameter #0:
          type: @libcore.util.NonNull
        // Null is valid return value
        return: @libcore.util.Nullable

    method getenv(Ljava/lang/String;)Ljava/lang/String;:
        // Name can't be null
        parameter #0:
          type: @libcore.util.NonNull
        // Null is valid return value
        return: @libcore.util.Nullable

    method getenv()Ljava/util/Map;:
        // Never null
        return: @libcore.util.NonNull

    method load(Ljava/lang/String;)V:
        // Filename can't be null
        parameter #0:
          type: @libcore.util.NonNull

    method loadLibrary(Ljava/lang/String;)V:
        // Libname can't be null
        parameter #0:
          type: @libcore.util.NonNull

    method mapLibraryName(Ljava/lang/String;)Ljava/lang/String;:
        // Libname can't be null
        parameter #0:
          type: @libcore.util.NonNull
        // Never null
        return: @libcore.util.NonNull

class StringBuffer:
    method <init>(Ljava/lang/String;)V:
        // NPE on null argument
        parameter #0:
          type: @libcore.util.NonNull

    method <init>(Ljava/lang/CharSequence;)V:
        // NPE on null argument
        parameter #0:
          type: @libcore.util.NonNull

    method getChars(II[CI)V:
        // NPE on null argument
        parameter #2:
          type: @libcore.util.NonNull

    method append(Ljava/lang/Object;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/String;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method append([C)Ljava/lang/StringBuffer;:
        // Null for char[] methods result in NPE
        parameter #0:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method append([CII)Ljava/lang/StringBuffer;:
        // Null for char[] methods result in NPE
        parameter #0:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method append(Z)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method append(C)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method append(I)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method appendCodePoint(I)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method append(J)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method append(F)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method append(D)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method delete(II)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method deleteCharAt(I)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method replace(IILjava/lang/String;)Ljava/lang/StringBuffer;:
        // NPE from null
        parameter #2:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method substring(I)Ljava/lang/String;:
        // Never null
        return: @libcore.util.NonNull

    method subSequence(II)Ljava/lang/CharSequence;:
        // Never null
        return: @libcore.util.NonNull

    method substring(II)Ljava/lang/String;:
        // Never null
        return: @libcore.util.NonNull

    method insert(I[CII)Ljava/lang/StringBuffer;:
        // Null for char[] methods result in NPE
        parameter #1:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/Object;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/String;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(I[C)Ljava/lang/StringBuffer;:
        // Null for char[] methods result in NPE
        parameter #1:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuffer;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(IZ)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(IC)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(II)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(IJ)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(IF)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(ID)Ljava/lang/StringBuffer;:
        // Returns self
        return: @libcore.util.NonNull

    method indexOf(Ljava/lang/String;)I:
        parameter #0:
          type: @libcore.util.NonNull

    method indexOf(Ljava/lang/String;I)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method lastIndexOf(Ljava/lang/String;)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method lastIndexOf(Ljava/lang/String;I)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method reverse()Ljava/lang/StringBuffer;:
        // Never null
        return: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Never null
        return: @libcore.util.NonNull

class StringBuilder:

    method <init>(Ljava/lang/String;)V:
        // NPE on null argument
        parameter #0:
          type: @libcore.util.NonNull

    method <init>(Ljava/lang/CharSequence;)V:
        // NPE on null argument
        parameter #0:
          type: @libcore.util.NonNull

    method append(Ljava/lang/Object;)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/String;)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #0:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method append([C)Ljava/lang/StringBuilder;:
        // Null for char[] methods result in NPE
        parameter #0:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method append([CII)Ljava/lang/StringBuilder;:
        // Null for char[] methods result in NPE
        parameter #0:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method append(Z)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method append(C)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method append(I)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method append(J)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method append(F)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method append(D)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method appendCodePoint(I)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method delete(II)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method deleteCharAt(I)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method replace(IILjava/lang/String;)Ljava/lang/StringBuilder;:
        // NPE from null
        parameter #2:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method insert(I[CII)Ljava/lang/StringBuilder;:
        // Null for char[] methods result in NPE
        parameter #1:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/Object;)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/String;)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(I[C)Ljava/lang/StringBuilder;:
        // Null for char[] methods result in NPE
        parameter #1:
          type: @libcore.util.NonNull
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuilder;:
        // null -> "null"
        parameter #1:
          type: @libcore.util.Nullable
        // Returns self
        return: @libcore.util.NonNull

    method insert(IZ)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(IC)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(II)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(IJ)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(IF)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method insert(ID)Ljava/lang/StringBuilder;:
        // Returns self
        return: @libcore.util.NonNull

    method indexOf(Ljava/lang/String;)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method indexOf(Ljava/lang/String;I)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method lastIndexOf(Ljava/lang/String;)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method lastIndexOf(Ljava/lang/String;I)I:
        // NPE on null
        parameter #0:
          type: @libcore.util.NonNull

    method reverse()Ljava/lang/StringBuilder;:
        // Never null
        return: @libcore.util.NonNull

    method toString()Ljava/lang/String;:
        // Never null
        return: @libcore.util.NonNull

class Thread:
    // Always returns a string instance
    method toString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always return an instance
    method currentThread()Ljava/lang/Thread;:
        return: @libcore.util.NonNull

// It would be nice to use @NullFromTypeParam in ThreadLocal
// everywhere its <T> is used, buy sadly the code below makes it impossible:
//
// ThreadLocal<@NonNull Object> foo = new ThreadLocal<>();
// assertNull(foo.get())
//
// Hence @Nullable T is used heavily
class ThreadLocal:
    method withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal;:
        // NPE on null supplier
        parameter #0:
          type: @libcore.util.NonNull
	// Always returns instance
        return: @libcore.util.NonNull

    method initialValue()Ljava/lang/Object;:
        // Returns null by default
        return: @libcore.util.Nullable

    method get()Ljava/lang/Object;:
        // May return null
        return: @libcore.util.Nullable

    method set(Ljava/lang/Object;)V:
        // Depends on type param
        parameter #0:
          type: @libcore.util.NullFromTypeParam

package java.lang.reflect:

class AccessibleObject:
    // Empty array in the worst case
    method getAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull

class AnnotatedElement:
    // Empty array in the worst case
    method getAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull

class Array:
    // Returns instance or throws
    method newInstance(Ljava/lang/Class;I)Ljava/lang/Object;:
        return: @libcore.util.NonNull
    // Returns instance or throws
    method newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;:
        return: @libcore.util.NonNull

class Constructor:
    // Always returns an instance
    method toString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method toGenericString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method getName()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // There's always a declaring class
    method getDeclaringClass()Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // Empty array in the worst case
    method getParameterTypes()[Ljava/lang/Class;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Returns instance or throws
    method newInstance([Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.NonNull

class Executable:
    // There's always a declaring class
    method getDeclaringClass()Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method getName()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Empty array in the worst case
    method getParameterTypes()[Ljava/lang/Class;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getTypeParameters()[Ljava/lang/reflect/TypeVariable;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getGenericParameterTypes()[Ljava/lang/reflect/Type;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getParameters()[Ljava/lang/reflect/Parameter;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getExceptionTypes()[Ljava/lang/Class;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getGenericExceptionTypes()[Ljava/lang/reflect/Type;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Always returns an instance
    method toGenericString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Empty array in the worst case
    method getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getParameterAnnotations()[[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
          inner-type 0, 0, 0, 0:  @libcore.util.NonNull

class Field:
    // Always returns an instance
    method getName()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // There's always a type of a field
    method getType()Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method toString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method toGenericString()Ljava/lang/String;:
        return: @libcore.util.NonNull

class GenericArrayType:
    // There's always a type for array
    method getGenericComponentType()Ljava/lang/reflect/Type;:
        return: @libcore.util.NonNull

class GenericDeclaration:
    // Empty array in the worst case
    method getTypeParameters()[Ljava/lang/reflect/TypeVariable;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull

class Member:
    method getDeclaringClass()Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method getName()Ljava/lang/String;:
        return: @libcore.util.NonNull

class Method:
    // There's always a declaring class
    method getDeclaringClass()Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // Empty array in the worst case
    method getTypeParameters()[Ljava/lang/reflect/TypeVariable;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // There's always a return type (such as Void.class)
    method getReturnType()Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // There's always a return type (such as Void.class)
    method getGenericReturnType()Ljava/lang/reflect/Type;:
        return: @libcore.util.NonNull
    // Empty array in the worst case
    method getParameterTypes()[Ljava/lang/Class;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getGenericParameterTypes()[Ljava/lang/reflect/Type;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getExceptionTypes()[Ljava/lang/Class;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getGenericExceptionTypes()[Ljava/lang/reflect/Type;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Always returns an instance
    method toString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method toGenericString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // Empty array in the worst case
    method getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getParameterAnnotations()[[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
          inner-type 0, 0, 0, 0:  @libcore.util.NonNull


class ParameterizedType:
    // Empty array in the worst case
    method getActualTypeArguments()[Ljava/lang/reflect/Type;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Always returns an instance
    method getRawType()Ljava/lang/reflect/Type;:
        return: @libcore.util.NonNull

class Parameter:
    // Always returns an instance
    method toString()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // There's always a declaring executable
    method getDeclaringExecutable()Ljava/lang/reflect/Executable;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method getRealName()Ljava/lang/String;:
        return: @libcore.util.NonNull
    // There's always a type
    method getParameterizedType()Ljava/lang/reflect/Type;:
        return: @libcore.util.NonNull
    // There's always a type
    method getType()Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // Empty array in the worst case
    method getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Empty array in the worst case
    method getAnnotations()[Ljava/lang/annotation/Annotation;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull

class Proxy:
    // Always returns an instance (or throws)
    method getProxyClass(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;:
        return: @libcore.util.NonNull
    // Always returns an instance (or throws)
    method newProxyInstance(Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;:
        return: @libcore.util.NonNull
    // Always returns an instance (or throws)
    method getInvocationHandler(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;:
        return: @libcore.util.NonNull

class Type:
    // Always returns an instance
    method getTypeName()Ljava/lang/String;:
        return: @libcore.util.NonNull

class TypeVariable:
    // Empty array in the worst case
    method getBounds()[Ljava/lang/reflect/Type;:
        return:  @libcore.util.NonNull
          inner-type 0, 0:  @libcore.util.NonNull
    // Always returns an instance
    method getGenericDeclaration()Ljava/lang/reflect/GenericDeclaration;:
        return: @libcore.util.NonNull
    // Always returns an instance
    method getName()Ljava/lang/String;:
        return: @libcore.util.NonNull

class WildcardType:
    // Empty array in the worst case
    method getUpperBounds()[Ljava/lang/reflect/Type;:
        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

    method add(Ljava/lang/Object;)Z:
        // Nullness depends on type parameter nullness
        parameter #0:
          type: @libcore.util.NullFromTypeParam

    method remove(Ljava/lang/Object;)Z:
        // param #0 has to allow nulls
        parameter #0:
          type: @libcore.util.Nullable

    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

    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);
          // Nullness depends on type parameter nullness
          inner-type 3, 0: @libcore.util.NullFromTypeParam

    method addAll(ILjava/util/Collection;)Z:
        // Javadoc mention NPE for null param #1
        parameter #1:
          type: @libcore.util.NonNull
          // boolean addAll(int, Collection<? extends E> c);
          inner-type 3, 0: @libcore.util.NullFromTypeParam

    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;:
        // Nullness depends on type parameter nullness
        // E get(int index);
        return: @libcore.util.NullFromTypeParam

    method set(ILjava/lang/Object;)Ljava/lang/Object;:
        // Nullness depends on type parameter nullness
        // E set(int index, E element);
        parameter #0:
          type: @libcore.util.NullFromTypeParam
        return: @libcore.util.NullFromTypeParam

    method add(ILjava/lang/Object;)V:
        // Nullness depends on type parameter nullness
        // void add(int index, E element);
        parameter #1:
          type: @libcore.util.NullFromTypeParam

    method remove(I)Ljava/lang/Object;:
        // Nullness depends on type parameter nullness
        // E remove(int index);
        return: @libcore.util.NullFromTypeParam

    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
