| 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; |
| |
| /** |
| * This annotation can be used two ways: |
| * |
| * <p>1. As a meta-annotation indicating that an annotation type prevents whole-program inference. |
| * For example, if the definition of {@code @Inject} is meta-annotated with |
| * {@code @IgnoreInWholeProgramInference}:<br> |
| * {@code @IgnoreInWholeProgramInference}<br> |
| * {@code @interface Inject {}}<br> |
| * then no type qualifier will be inferred for any field annotated by {@code @Inject}. |
| * |
| * <p>This is appropriate for fields that are set reflectively, so there are no calls in client code |
| * that type inference can learn from. Examples of qualifiers that should be meta-annotated with |
| * {@code @IgnoreInWholeProgramInference} include <a |
| * href="https://docs.oracle.com/javaee/7/api/javax/inject/Inject.html">{@code @Inject}</a>, <a |
| * href="https://docs.oracle.com/javaee/7/api/javax/inject/Singleton.html">{@code @Singleton}</a>, |
| * and <a |
| * href="https://types.cs.washington.edu/plume-lib/api/plume/Option.html">{@code @Option}</a>. |
| * |
| * <p>2. As a field annotation indicating that no type qualifier will be inferred for the field it |
| * annotates. |
| * |
| * <p>See |
| * org.checkerframework.common.wholeprograminference.WholeProgramInferenceScenes#updateFromFieldAssignment |
| * |
| * @checker_framework.manual #whole-program-inference-ignores-some-code Whole-program inference |
| * ignores some code |
| */ |
| @Documented |
| @Retention(RetentionPolicy.RUNTIME) |
| @Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD}) |
| public @interface IgnoreInWholeProgramInference {} |