Hi
Environment
Java 17 (Java version: 17.0.5, vendor: Eclipse Adoptium, runtime: jdk-17.0.5.8-hotspot). SonarQube Developer Edition Version 10.0 (build 68432) + SonarLint 8.3.0.71062 in IntelliJ, in connected mode. Rule is java:S2333
.
Example code
Consider a class like the following:
public final class Example<C extends Comparable<C>> {
@SafeVarargs
public final Example<C> foo(C... elements) {
return this;
}
}
One would want to add @SafeVarargs
to this method in order to avoid a compiler warning “about potential heap pollution”. Adding this annotation to a method requires the method to be declared final
, otherwise the compiler will reject the code.
Adding this final
modifier then triggers java:S2333
, which states that the final
is redundant due to the class being declared final. This is the false positive, as the compiler requires the method to be final
, even if the containing class is.