org.checkerframework.framework.qual.SubtypeOf Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of checker Show documentation
Show all versions of checker Show documentation
The Checker Framework enhances Java's type system to
make it more powerful and useful. This lets software developers
detect and prevent errors in their Java programs.
The Checker Framework includes compiler plug-ins ("checkers")
that find bugs or verify their absence. It also permits you to
write your own compiler plug-ins.
package org.checkerframework.framework.qual;
import java.lang.annotation.Annotation;
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;
/**
* A meta-annotation to specify all the qualifiers that the given qualifier is an immediate subtype
* of. This provides a declarative way to specify the type qualifier hierarchy. (Alternatively, the
* hierarchy can be defined procedurally by subclassing {@link
* org.checkerframework.framework.type.QualifierHierarchy} or {@link
* org.checkerframework.framework.type.TypeHierarchy}.)
*
* Example:
*
*
@SubtypeOf( { Nullable.class } )
* public @interface NonNull {}
*
*
* For the top qualifier in the qualifier hierarchy (i.e., the qualifier that is a supertype of
* all other qualifiers in the given hierarchy), use an empty set of values:
*
*
@SubtypeOf( {} )
* public @interface Nullable {}
*
* @SubtypeOf( {} )
* public @interface MaybeAliased {}
*
*
* Together, all the {@code @SubtypeOf} meta-annotations fully describe the type qualifier
* hierarchy.
*
* @checker_framework.manual #creating-declarative-hierarchy Declaratively defining the qualifier
* hierarchy
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
@AnnotatedFor("nullness")
public @interface SubtypeOf {
/** An array of the supertype qualifiers of the annotated qualifier. */
Class[] value();
}