All Downloads are FREE. Search and download functionalities are using the official Maven repository.

checkers.quals.SubtypeOf Maven / Gradle / Ivy

package checkers.quals;

import java.lang.annotation.*;

/**
 * A meta-annotation to specify all the qualifiers that the given qualifier
 * is a subtype of.  This provides a declarative way to specify the type
 * qualifier hierarchy.  (Alternatively, the hierarchy can be defined
 * procedurally by subclassing {@link checkers.types.QualifierHierarchy} or
 * {@link checkers.types.TypeHierarchy}.)
 *
 * 

* Example: *

 @SubtypeOf( { Nullable.class } )
 * public @interface NonNull { }
 * 
* *

* * If a qualified type is a subtype of the same type without any qualifier, * then use Unqualified.class in place of a type qualifier * class. For example, to express that @Encrypted C * is a subtype of C (for every class * C), and likewise for @Interned, write: * *

 @SubtypeOf(Unqualified.class)
 * public @interface Encrypted { }
 *
 * @SubtypeOf(Unqualified.class)
 * public @interface Interned { }
 * 
* *

* * 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 ReadOnly { }
 * 
* *

* Together, all the @SubtypeOf meta-annotations fully describe the type * qualifier hierarchy. * No @SubtypeOf meta-annotation is needed on (or can be written on) the * Unqualified pseudo-qualifier, whose position in the hierarchy is * inferred from the meta-annotations on the explicit qualifiers. */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface SubtypeOf { /** An array of the supertype qualifiers of the annotated qualifier **/ Class[] value(); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy