blob: 4dd970b9c732dbfd4b20c9e45f2fa44ba1691667 [file] [log] [blame]
package org.checkerframework.framework.qual;
import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* This is a declaration annotation that applies to type declarations. Some classes conceptually
* take a type qualifier parameter. This annotation indicates that this class and its subclasses
* explicitly do not do so. The only reason to write this annotation is when {@code
* HasQualifierParameter} is enabled by default, by writing {@code HasQualifierParameter} on a
* package.
*
* <p>When a class is {@code @NoQualifierParameter}, all its subclasses are as well.
*
* <p>One or more top qualifiers must be given for the hierarchies for which there are no qualifier
* parameters. This annotation may not be written on the same class as {@code HasQualifierParameter}
* for the same hierarchy.
*
* <p>It is an error for a superclass to be {@code @HasQualifierParameter} but a subclass to be
* {@code @NoQualifierParameter} for the same hierarchy.
*
* @see HasQualifierParameter
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface NoQualifierParameter {
/**
* Class of the top qualifier for the hierarchy for which this class has no qualifier parameter.
*
* @return the value
*/
Class<? extends Annotation>[] value();
}