package org.checkerframework.framework.qual;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * This annotation is for comments related to the Checker Framework.
 *
 * <p>Using {@code @CFComment} makes it easy to find Checker-Framework-related comments, and to copy
 * those comments from one version of a codebase to another (using the Annotation File Utilities).
 *
 * <p>Here is an example:
 *
 * <pre><code>
 * {@literal @}CFComment("interning: factory methods guarantee that all elements are interned")
 *  public class MyClass {
 *   {@literal @}CFComment({"nullness: non-null return type is more specific than in superclass",
 *                "signedness: comment related to Signedness type system"})
 *    public String myMethod() { ... }
 * }
 * </code></pre>
 *
 * <p>As a matter of style, programmers should use this annotation on the most deeply nested element
 * to which the comment applies (e.g., local variable rather than method, and method rather than
 * class).
 *
 * @checker_framework.manual #library-tips-dont-change-the-code Don't change the code
 */
@Documented
@Retention(RetentionPolicy.SOURCE)
public @interface CFComment {
  /**
   * Comments about Checker Framework annotations. The text is not interpreted by the Checker
   * Framework.
   *
   * <p>If you prefix each comment by the name of the type system, the comments are easier to
   * understand and search for.
   */
  String[] value();
}
