org.checkerframework.framework.source.SuppressWarningsKeys Maven / Gradle / Ivy
Show all versions of framework-all Show documentation
package org.checkerframework.framework.source;
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;
/**
* Specifies the argument(s) that this checker recognizes for suppressing warnings via the {@link
* SuppressWarnings} annotation. Any of the given arguments suppresses all warnings related to the
* checker.
*
* In order for this annotation to have an effect, it must be placed on the declaration of a
* class that extends {@link SourceChecker}.
*
*
For example, warnings issued by the Nullness Checker can be suppressed using
* {@code @SuppressWarnings("nullness")} because {@link
* org.checkerframework.checker.nullness.NullnessChecker} is annotated with
* {@code @SuppressWarningsKey("nullness")}.
*
*
TODO: the previous paragraph about the Nullness Checker is out-of-date. We only consider this
* meta-annotation on the most-concrete SourceChecker subclass and only use the suppression keys
* listed there. For the Nullness Checker we add multiple suppression keys along the hierarchy.
* Should we change the semantics of this annotation to look for it on all classes from the
* most-concrete class up to SourceChecker? That would make the behavior consistent with e.g. our
* SupportedOptions. Is there ever a reason where that would be unwanted?
*/
@Inherited
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface SuppressWarningsKeys {
/**
* @return array of strings, any one of which causes this checker to suppress a warning when
* passed as the argument of {@literal @}{@link SuppressWarnings}
*/
String[] value();
}