Non-constant variable missing @Var annotation


The problem

Most references are never modified, and accidentally modifying a reference is a potential source of bugs.

One option for avoiding accidental modification is to annotate all variables that are not modified as final. However that approach is very noisy, since most variables are never modified, and accidental modification is only avoided if you remember to add final everywhere.

A better solution is to invert the default, and assume that all variables are constant unless they are explicitly declared as modifiable. The @Var annotation provides a way to mark variables as modifiable. The accompanying Error Prone check enforces that all modifiable parameters and local variables are explicitly annotated with @Var.

Since Java 8 can infer whether a local variable or parameter is effectively final, and @Var makes it clear whether any variable is non-final, explicitly marking local variables and parameters as final is discouraged.

The annotation can also be applied to fields to indicate that the field is deliberately non-final, but the use of @Var on fields is not required.


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