blob: 69515f78251e94b2dd11bea68ad5245cb855e6c0 [file] [log] [blame]
package org.checkerframework.framework.qual;
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;
/**
* Indicates that the annotated qualifier is the default qualifier in the qualifier hierarchy: it
* applies if the programmer writes no explicit qualifier and no other default has been specified
* for the location.
*
* <p>Other defaults can be specified for a checker via the {@link DefaultFor} meta-annotation,
* which takes precedence over {@code DefaultQualifierInHierarchy}, or via {@link
* org.checkerframework.framework.type.GenericAnnotatedTypeFactory#addCheckedCodeDefaults(org.checkerframework.framework.util.defaults.QualifierDefaults)}.
*
* <p>The {@link DefaultQualifier} annotation, which targets Java code elements, takes precedence
* over {@code DefaultQualifierInHierarchy}.
*
* <p>Each type qualifier hierarchy may have at most one qualifier marked as {@code
* DefaultQualifierInHierarchy}.
*
* @checker_framework.manual #effective-qualifier The effective qualifier on a type (defaults and
* inference)
* @see org.checkerframework.framework.qual.DefaultQualifier
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface DefaultQualifierInHierarchy {}