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.LiteralKind;
import org.checkerframework.framework.qual.QualifierForLiterals;
import org.checkerframework.framework.qual.SubtypeOf;

/**
 * {@link Nullable} is a type annotation that makes no commitments about whether the value is {@code
 * null}. Equivalently, the type includes the {@code null} value.
 *
 * <p>The Nullness Checker issues an error if {@code null} is assigned an an expression of {@link
 * NonNull} type.
 *
 * <p>Programmers typically write {@code @Nullable} to indicate that the value is not known to be
 * {@link NonNull}. However, since {@code @Nullable} is a supertype of {@code @NonNull}, an
 * expression that never evaluates to {@code null} can have a declared type of {@code @Nullable}.
 *
 * @see NonNull
 * @see MonotonicNonNull
 * @see org.checkerframework.checker.nullness.NullnessChecker
 * @checker_framework.manual #nullness-checker Nullness Checker
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@SubtypeOf({})
@QualifierForLiterals(LiteralKind.NULL)
@DefaultFor(types = Void.class)
public @interface Nullable {}
