Methods can be annotated with Error Prone's `@FormatMethod` annotation to
indicate that calls to this function should be treated similarly to
`String.format`: One of the parameters is a 'format string' (the first String
parameter or the only parameter annotated with `@FormatString`), and the
subsequent parameters are used as format arguments to that format string.

For example:

```java
@FormatMethod
void myLogMethod(@FormatString String fmt, Object... args) {}

// ERROR: 2nd format argument isn't a number
myLogMessage("My log message: %d and %d", 3, "has a message");
```

In order to avoid complex runtime issues when the format string part is
dynamically constructed, leading to a mismatch between the arguments and format
strings, we require that the 'format string' argument in calls to
`@FormatMethod`-annotated methods be one of:

*   Another `@FormatString`-annotated variable
*   A compile time constant string
*   A final or effectively final variable assigned to a compile time constant
    string
*   A string literal

We will then check that the format string and format arguments match.

For more information on possible format string errors, see the documentation on
the [FormatString check](FormatString).

The import for `@FormatMethod` is:

```java
import com.google.errorprone.annotations.FormatMethod;
```

## Suppression

Suppress false positives by adding the suppression annotation
@SuppressWarnings("FormatStringAnnotation") to the enclosing element.
