| package org.checkerframework.common.subtyping.qual; |
| |
| import java.lang.annotation.Documented; |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Target; |
| import org.checkerframework.framework.qual.SubtypeOf; |
| import org.checkerframework.framework.qual.TargetLocations; |
| import org.checkerframework.framework.qual.TypeUseLocation; |
| |
| /** |
| * A special annotation intended solely for representing the bottom type in the qualifier hierarchy. |
| * It should not be used! Instead, each type system should define its own dedicated bottom type. |
| * |
| * <p>This qualifier is used automatically if the existing qualifiers do not have a bottom type. |
| * This only works the user never runs two type systems together. Furthermore, because it has no |
| * {@code @RetentionPolicy} meta-annotation, 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 {@code |
| * org.checkerframework.framework.type.treeannotator.ImplicitsTreeAnnotator#addTreeKind(com.sun.source.tree.Tree.Kind, |
| * javax.lang.model.element.AnnotationMirror)} to add default annotations and needs to manually add |
| * the bottom qualifier to the qualifier hierarchy. |
| * |
| * @see org.checkerframework.framework.type.QualifierHierarchy#getBottomAnnotations() |
| * @checker_framework.manual #subtyping-checker Subtyping Checker |
| */ |
| @Documented |
| @SubtypeOf({}) |
| @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) |
| @TargetLocations({TypeUseLocation.EXPLICIT_LOWER_BOUND, TypeUseLocation.EXPLICIT_UPPER_BOUND}) |
| public @interface Bottom {} |