It looks to be caused by the DesignForExtension
rule. According to the documentation:
Checks that classes are designed for extension. More specifically, it
enforces a programming style where superclasses provide empty "hooks"
that can be implemented by subclasses.
The exact rule is that nonprivate, nonstatic methods of classes that
can be subclassed must either be
abstract or
final or
have an empty implementation
Rationale: This API design style protects superclasses against beeing
broken by subclasses. The downside is that subclasses are limited in
their flexibility, in particular they cannot prevent execution of code
in the superclass, but that also means that subclasses cannot corrupt
the state of the superclass by forgetting to call the super method.
Source: http://sonar.15.n6.nabble.com/design-for-extension-rule-tp3200037p3200043.html
But since your method has a final
modifier, I'd say you found a bug and might want to log a bug report.
https://github.com/checkstyle/checkstyle/issues