NonFinalCompileTimeConstant
@CompileTimeConstant parameters should be final or effectively final

Category
JDK
Severity
ERROR
Maturity

The problem

If a method’s formal parameter is annotated with @CompileTimeConstant, the method will always be invoked with an argument that is a static constant. If the parameter itself is non-final, then it is a mutable reference to immutable data. This is rarely useful, and can be confusing when trying to use the parameter in a context that requires an compile-time constant. For example:

void f(@CompileTimeConstant y) {}
void g(@CompileTimeConstant x) {
  x = f(x); // x is not a constant
}

Suppression

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