package org.checkerframework.common.value.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;
import org.checkerframework.framework.qual.SubtypeOf;

/**
 * An annotation indicating the possible values for a String type. The annotation's arguments are
 * Java regular expressions. If an expression's type has this annotation, then at run time, the
 * expression evaluates to a string that matches at least one of the regular expressions. Matching
 * is via the <a
 * href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#matches(java.lang.String)">java.lang.String#matches</a>
 * method, which matches against the entire string (it does not look for a match against a
 * substring).
 *
 * @checker_framework.manual #constant-value-checker Constant Value Checker
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
@SubtypeOf({UnknownVal.class})
public @interface MatchesRegex {
  /**
   * A set of Java regular expressions.
   *
   * @return the regular expressions
   */
  String[] value();
}
