| package org.checkerframework.checker.i18nformatter.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; |
| |
| /** |
| * This annotation indicates that when a string of the annotated type is passed as the first |
| * argument to {@link java.text.MessageFormat#format(String, Object...)}, then the expression that |
| * is an argument to the annotation can be passed as the remaining arguments, in varargs style. |
| * |
| * <p>The annotation is used to annotate a method to ensure that an argument is of a particular type |
| * indicated by a format string. |
| * |
| * <p>Example: |
| * |
| * <pre> static void method(@I18nFormatFor("#2") String format, Object... arg2) {...} |
| * |
| * method("{0, number}", 2);</pre> |
| * |
| * This ensures that the second parameter ("#2") can be passed as the remaining arguments of {@link |
| * java.text.MessageFormat#format(String, Object...)}, when the first argument is {@code "format"}. |
| * |
| * @checker_framework.manual #i18n-formatter-checker Internationalization Format String Checker |
| */ |
| @Documented |
| @Retention(RetentionPolicy.RUNTIME) |
| @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) |
| @SubtypeOf(I18nUnknownFormat.class) |
| public @interface I18nFormatFor { |
| /** |
| * Indicates which formal parameter is the arguments to the format method. The value should be |
| * {@code #} followed by the 1-based index of the formal parameter that is the arguments to the |
| * format method, e.g., {@code "#2"}. |
| * |
| * @return {@code #} followed by the 1-based index of the formal parameter that is the arguments |
| * to the format method |
| */ |
| String value(); |
| } |