package org.checkerframework.framework.qual;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
/**
* A special annotation intended solely for representing the bottom type in the qualifier hierarchy.
* This qualifier is only used automatically if the existing qualifiers do not have a bottom type.
*
* <p>Other type systems could reuse this qualifier instead of introducing their own dedicated
* bottom qualifier. However, this is usually a bad idea, because it will work only if the user
* never runs two type systems together. Furthermore, because of the missing RetentionPolicy, this
* qualifier will not be stored in bytecode. So, only use this qualifier during prototyping of very
* simple type systems. For realistic systems, introduce a top and bottom qualifier that gets stored
* in bytecode.
*
* <p>To use this qualifier, the type system designer needs to use methods like {@link
* org.checkerframework.framework.type.treeannotator.ImplicitsTreeAnnotator#addTreeKind(com.sun.source.tree.Tree.Kind,
* javax.lang.model.element.AnnotationMirror)} to add implicit annotations and needs to manually add
* the bottom qualifier to the qualifier hierarchy.
*
* @see org.checkerframework.framework.type.QualifierHierarchy#getBottomAnnotations()
*/
@SubtypeOf({})
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@TargetLocations({TypeUseLocation.EXPLICIT_LOWER_BOUND, TypeUseLocation.EXPLICIT_UPPER_BOUND})
public @interface Bottom {}