//
// 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.io:
class PrintWriter:

    method <init>(Ljava/io/Writer;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method <init>(Ljava/io/Writer;Z)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method <init>(Ljava/io/OutputStream;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method <init>(Ljava/io/OutputStream;Z)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

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

    method <init>(Ljava/nio/charset/Charset;Ljava/io/File;)V:
        return:

    method <init>(Ljava/lang/String;Ljava/lang/String;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.NonNull

    method <init>(Ljava/io/File;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method <init>(Ljava/io/File;Ljava/lang/String;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.NonNull

    method write([CII)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method write([C)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method write(Ljava/lang/String;II)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method write(Ljava/lang/String;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method print([C)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method print(Ljava/lang/String;)V:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method print(Ljava/lang/Object;)V:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method println(Ljava/lang/String;)V:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method println(Ljava/lang/Object;)V:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable

    method printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable
        parameter #1:
            type: @libcore.util.NonNull
        parameter #2:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable

    method format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable

    method format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable
        parameter #1:
            type: @libcore.util.NonNull
        parameter #2:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable

    method append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable

    method append(Ljava/lang/CharSequence;II)Ljava/io/PrintWriter;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable

    method append(C)Ljava/io/PrintWriter;:
        return: @libcore.util.NonNull

    method append(C)Ljava/io/Writer;:
        return: @libcore.util.NonNull

    method append(Ljava/lang/CharSequence;II)Ljava/io/Writer;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable

    method append(Ljava/lang/CharSequence;)Ljava/io/Writer;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable

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

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

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

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

class Object:

    method getClass()Ljava/lang/Class;:
        return: @libcore.util.NonNull

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

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

class Class:

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

    method toGenericString()Ljava/lang/String;:
        return: @libcore.util.NonNull

    method forName(Ljava/lang/String;)Ljava/lang/Class;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull

    method forName(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
        parameter #2:
            type: @libcore.util.Nullable

    method newInstance()Ljava/lang/Object;:
        return: @libcore.util.NonNull

    method isInstance(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method isAssignableFrom(Ljava/lang/Class;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method getName()Ljava/lang/String;:
        return: @libcore.util.NonNull

    method getClassLoader()Ljava/lang/ClassLoader;:
        return: @libcore.util.Nullable

    method getTypeParameters()[Ljava/lang/reflect/TypeVariable;:
        return: @libcore.util.NonNull
            inner-type 0, 0,3, 0: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getSuperclass()Ljava/lang/Class;:
        return: @libcore.util.Nullable

    method getGenericSuperclass()Ljava/lang/reflect/Type;:
        return: @libcore.util.Nullable

    method getPackage()Ljava/lang/Package;:
        return: @libcore.util.Nullable

    method getInterfaces()[Ljava/lang/Class;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getGenericInterfaces()[Ljava/lang/reflect/Type;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getComponentType()Ljava/lang/Class;:
        return: @libcore.util.Nullable

    method getSigners()[Ljava/lang/Object;:
        return: @libcore.util.Nullable
            inner-type 0, 0: @libcore.util.NonNull

    method getEnclosingMethod()Ljava/lang/reflect/Method;:
        return: @libcore.util.Nullable

    method getEnclosingConstructor()Ljava/lang/reflect/Constructor;:
        return: @libcore.util.Nullable

    method getDeclaringClass()Ljava/lang/Class;:
        return: @libcore.util.Nullable

    method getEnclosingClass()Ljava/lang/Class;:
        return: @libcore.util.Nullable

    method getSimpleName()Ljava/lang/String;:
        return: @libcore.util.NonNull

    method getTypeName()Ljava/lang/String;:
        return: @libcore.util.NonNull

    method getCanonicalName()Ljava/lang/String;:
        return: @libcore.util.Nullable

    method getClasses()[Ljava/lang/Class;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getFields()[Ljava/lang/reflect/Field;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getMethods()[Ljava/lang/reflect/Method;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getConstructors()[Ljava/lang/reflect/Constructor;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getField(Ljava/lang/String;)Ljava/lang/reflect/Field;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull

    method getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.Nullable
                inner-type 0, 0: @libcore.util.NonNull

    method getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable
                inner-type 0, 0: @libcore.util.NonNull

    method getDeclaredClasses()[Ljava/lang/Class;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getDeclaredFields()[Ljava/lang/reflect/Field;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getDeclaredMethods()[Ljava/lang/reflect/Method;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getDeclaredConstructors()[Ljava/lang/reflect/Constructor;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull

    method getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull
        parameter #1:
            type: @libcore.util.Nullable
                inner-type 0, 0: @libcore.util.NonNull

    method getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;:
        return: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.Nullable
                inner-type 0, 0: @libcore.util.NonNull

    method getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NonNull

    method getResource(Ljava/lang/String;)Ljava/net/URL;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NonNull

    method getProtectionDomain()Ljava/security/ProtectionDomain;:
        return: @libcore.util.Nullable

    method getEnumConstants()[Ljava/lang/Object;:
        return: @libcore.util.Nullable
            inner-type 0, 0: @libcore.util.NonNull

    method cast(Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.Nullable

    method asSubclass(Ljava/lang/Class;)Ljava/lang/Class;:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NonNull

    method isAnnotationPresent(Ljava/lang/Class;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method getAnnotationsByType(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull
        parameter #0:
            type: @libcore.util.NonNull

    method getAnnotations()[Ljava/lang/annotation/Annotation;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method getDeclaredAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NonNull

    method getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.NonNull

    method isDeclaredAnnotationPresent(Ljava/lang/Class;)Z:
        return:

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 ArrayList:

    method <init>(Ljava/util/Collection;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

    method contains(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method indexOf(Ljava/lang/Object;)I:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method lastIndexOf(Ljava/lang/Object;)I:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method clone()Ljava/lang/Object;:
        return: @libcore.util.NonNull

    method toArray()[Ljava/lang/Object;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.Nullable

    method toArray([Ljava/lang/Object;)[Ljava/lang/Object;:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.Nullable

    method get(I)Ljava/lang/Object;:
        return: @libcore.util.NullFromTypeParam

    method set(ILjava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NullFromTypeParam

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

    method add(ILjava/lang/Object;)V:
        return:
        parameter #1:
            type: @libcore.util.NullFromTypeParam

    method remove(I)Ljava/lang/Object;:
        return: @libcore.util.NullFromTypeParam

    method remove(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method addAll(Ljava/util/Collection;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

    method addAll(ILjava/util/Collection;)Z:
        return:
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

    method removeAll(Ljava/util/Collection;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method retainAll(Ljava/util/Collection;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method listIterator(I)Ljava/util/ListIterator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method listIterator()Ljava/util/ListIterator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method iterator()Ljava/util/Iterator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method subList(II)Ljava/util/List;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method forEach(Ljava/util/function/Consumer;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

    method spliterator()Ljava/util/Spliterator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method removeIf(Ljava/util/function/Predicate;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

    method replaceAll(Ljava/util/function/UnaryOperator;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0: @libcore.util.NullFromTypeParam

    method sort(Ljava/util/Comparator;)V:
        return:
        parameter #0:
            type: @libcore.util.Nullable
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

class HashMap:

    method <init>(Ljava/util/Map;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NullFromTypeParam

    method get(Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.Nullable

    method containsKey(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NullFromTypeParam

    method putAll(Ljava/util/Map;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NullFromTypeParam

    method remove(Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.Nullable

    method containsValue(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method keySet()Ljava/util/Set;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method values()Ljava/util/Collection;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method entrySet()Ljava/util/Set;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NonNull
            inner-type 3, 0,3, 0: @libcore.util.NullFromTypeParam
            inner-type 3, 0,3, 1: @libcore.util.NullFromTypeParam

    method getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.Nullable
        parameter #1:
            type: @libcore.util.Nullable

    method putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NullFromTypeParam

    method remove(Ljava/lang/Object;Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable
        parameter #1:
            type: @libcore.util.Nullable

    method replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.Nullable
        parameter #2:
            type: @libcore.util.NullFromTypeParam

    method replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NullFromTypeParam

    method computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.Nullable

    method computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NonNull
                inner-type 3, 2,2, 0: @libcore.util.Nullable

    method compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.Nullable
                inner-type 3, 2,2, 0: @libcore.util.Nullable

    method merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
        parameter #2:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NonNull
                inner-type 3, 1,2, 0: @libcore.util.NonNull
                inner-type 3, 2,2, 0: @libcore.util.Nullable

    method forEach(Ljava/util/function/BiConsumer;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NullFromTypeParam

    method replaceAll(Ljava/util/function/BiFunction;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 2,2, 0: @libcore.util.NullFromTypeParam

    method clone()Ljava/lang/Object;:
        return: @libcore.util.NonNull

class Iterator:

    method next()Ljava/lang/Object;:
        return: @libcore.util.NullFromTypeParam

    method forEachRemaining(Ljava/util/function/Consumer;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

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
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method toArray()[Ljava/lang/Object;:
        // Never returns null
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.Nullable

    method toArray([Ljava/lang/Object;)[Ljava/lang/Object;:
        // Javadoc mention NPE for param #0
        parameter #0:
          type: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.Nullable
        // Never returns null
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.Nullable

    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

    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, 2, 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, 2, 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
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method sort(Ljava/util/Comparator;)V:
        // Javadoc mention null as valid param #0
        parameter #0:
          type: @libcore.util.Nullable
          inner-type 3, 0, 2, 0: @libcore.util.NullFromTypeParam

    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 #1:
          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
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method listIterator(I)Ljava/util/ListIterator;:
        // Javadoc doesn't mention possiblity of a null result
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method subList(II)Ljava/util/List;:
         // Javadoc doesn't mention possiblity of a null result
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method spliterator()Ljava/util/Spliterator;:
        // Javadoc doesn't mention possiblity of a null result
        return: @libcore.util.NonNull

class Map:

    method containsKey(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method containsValue(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method get(Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.Nullable

    method put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NullFromTypeParam

    method remove(Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.Nullable

    method putAll(Ljava/util/Map;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NullFromTypeParam

    method keySet()Ljava/util/Set;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method values()Ljava/util/Collection;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method entrySet()Ljava/util/Set;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NonNull
            inner-type 3, 0,3, 0: @libcore.util.NullFromTypeParam
            inner-type 3, 0,3, 1: @libcore.util.NullFromTypeParam

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

    method getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.Nullable
        parameter #1:
            type: @libcore.util.Nullable

    method forEach(Ljava/util/function/BiConsumer;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NullFromTypeParam

    method replaceAll(Ljava/util/function/BiFunction;)V:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 2,2, 0: @libcore.util.NullFromTypeParam

    method putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NullFromTypeParam

    method remove(Ljava/lang/Object;Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable
        parameter #1:
            type: @libcore.util.Nullable

    method replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.Nullable
        parameter #2:
            type: @libcore.util.NullFromTypeParam

    method replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NullFromTypeParam

    method computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.Nullable

    method computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.NonNull
                inner-type 3, 2,2, 0: @libcore.util.Nullable

    method compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam
                inner-type 3, 1,2, 0: @libcore.util.Nullable
                inner-type 3, 2,2, 0: @libcore.util.Nullable

    method merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;:
        return: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NullFromTypeParam
        parameter #1:
            type: @libcore.util.NonNull
        parameter #2:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NonNull
                inner-type 3, 1,2, 0: @libcore.util.NonNull
                inner-type 3, 2,2, 0: @libcore.util.Nullable

class Map$Entry:

    method getKey()Ljava/lang/Object;:
        return: @libcore.util.NullFromTypeParam

    method getValue()Ljava/lang/Object;:
        return: @libcore.util.NullFromTypeParam

    method setValue(Ljava/lang/Object;)Ljava/lang/Object;:
        return: @libcore.util.NullFromTypeParam
        parameter #0:
            type: @libcore.util.NullFromTypeParam

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

    method comparingByKey()Ljava/util/Comparator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NonNull
            inner-type 3, 0,3, 0: @libcore.util.NonNull
            inner-type 3, 0,3, 1: @libcore.util.Nullable

    method comparingByValue()Ljava/util/Comparator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NonNull
            inner-type 3, 0,3, 0: @libcore.util.Nullable
            inner-type 3, 0,3, 1: @libcore.util.NonNull

    method comparingByKey(Ljava/util/Comparator;)Ljava/util/Comparator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NonNull
            inner-type 3, 0,3, 0: @libcore.util.NullFromTypeParam
            inner-type 3, 0,3, 1: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

    method comparingByValue(Ljava/util/Comparator;)Ljava/util/Comparator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NonNull
            inner-type 3, 0,3, 0: @libcore.util.Nullable
            inner-type 3, 0,3, 1: @libcore.util.NullFromTypeParam
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

class Set:

    method contains(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method iterator()Ljava/util/Iterator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam

    method toArray()[Ljava/lang/Object;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.Nullable

    method toArray([Ljava/lang/Object;)[Ljava/lang/Object;:
        return: @libcore.util.NonNull
            inner-type 0, 0: @libcore.util.Nullable
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 0, 0: @libcore.util.Nullable

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

    method remove(Ljava/lang/Object;)Z:
        return:
        parameter #0:
            type: @libcore.util.Nullable

    method containsAll(Ljava/util/Collection;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method addAll(Ljava/util/Collection;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull
                inner-type 3, 0,2, 0: @libcore.util.NullFromTypeParam

    method retainAll(Ljava/util/Collection;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull

    method removeAll(Ljava/util/Collection;)Z:
        return:
        parameter #0:
            type: @libcore.util.NonNull

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

    method spliterator()Ljava/util/Spliterator;:
        return: @libcore.util.NonNull
            inner-type 3, 0: @libcore.util.NullFromTypeParam
