@SubtypeOf(value={}) @Target(value={TYPE_USE,TYPE_PARAMETER}) @TargetLocations(value={EXPLICIT_LOWER_BOUND,EXPLICIT_UPPER_BOUND}) public @interface Bottom
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.
To use this qualifier, the type system designer needs to use methods like 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.