| package org.checkerframework.checker.nullness.qual; |
| |
| import java.lang.annotation.Documented; |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| import org.checkerframework.framework.qual.DefaultFor; |
| import org.checkerframework.framework.qual.DefaultQualifierInHierarchy; |
| import org.checkerframework.framework.qual.LiteralKind; |
| import org.checkerframework.framework.qual.QualifierForLiterals; |
| import org.checkerframework.framework.qual.SubtypeOf; |
| import org.checkerframework.framework.qual.TypeKind; |
| import org.checkerframework.framework.qual.TypeUseLocation; |
| import org.checkerframework.framework.qual.UpperBoundFor; |
| |
| /** |
| * If an expression's type is qualified by {@code @NonNull}, then the expression never evaluates to |
| * {@code null}. (Unless the program has a bug; annotations specify intended behavior.) |
| * |
| * <p>For fields of a class, the {@link NonNull} annotation indicates that this field is never |
| * {@code null} <em>after the class has been fully initialized</em>. For static fields, the {@link |
| * NonNull} annotation indicates that this field is never {@code null} <em>after the containing |
| * class is initialized</em>. "Fully initialized" essentially means that the Java constructor has |
| * completed. See the <a |
| * href="https://checkerframework.org/manual/#initialization-checker">Initialization Checker |
| * documentation</a> for more details. |
| * |
| * <p>This annotation is rarely written in source code, because it is the default. |
| * |
| * @see Nullable |
| * @see MonotonicNonNull |
| * @checker_framework.manual #nullness-checker Nullness Checker |
| * @checker_framework.manual #initialization-checker Initialization Checker |
| * @checker_framework.manual #bottom-type the bottom type |
| */ |
| @Documented |
| @Retention(RetentionPolicy.RUNTIME) |
| @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) |
| @SubtypeOf(MonotonicNonNull.class) |
| @QualifierForLiterals(LiteralKind.STRING) |
| @DefaultQualifierInHierarchy |
| @DefaultFor(TypeUseLocation.EXCEPTION_PARAMETER) |
| @UpperBoundFor( |
| typeKinds = { |
| TypeKind.PACKAGE, |
| TypeKind.INT, |
| TypeKind.BOOLEAN, |
| TypeKind.CHAR, |
| TypeKind.DOUBLE, |
| TypeKind.FLOAT, |
| TypeKind.LONG, |
| TypeKind.SHORT, |
| TypeKind.BYTE |
| }) |
| public @interface NonNull {} |