`RedundantOverride` does not flag redundant `Object#hashCode` override
- Dominant language
- Java
- Stars
- 7.2k
- Forks
- 820
- Avg merge
- 5h 9m
- Merged PRs (30d)
- 50
Description
Consider the following code:
```java
public final class RedundantOverrideHashCode {
@Override
public int hashCode() {
return super.hashCode();
}
}
```
The `RedundantOverride` bug checker doesn't suggest dropping the redundant `#hashCode` override.
```sh
curl -LO https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/2.13.1/error_prone_core-2.13.1-with-dependencies.jar
javac \
-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
-XDcompilePolicy=simple \
-processorpath error_prone_core-2.13.1-with-dependencies.jar \
'-Xplugin:ErrorProne -XepDisableAllChecks -Xep:RedundantOverride:ERROR' \
RedundantOverrideHashCode.java
```
It returns no match since `Object#hashCode` has the `native` modifier (see [line 91-94](https://github.com/google/error-prone/blob/56dfc7912b6300bae8706b241c19054a582be79b/core/src/main/java/com/google/errorprone/bugpatterns/RedundantOverride.java#L91-L94)). However, naively excluding the native modifier (something like `Sets.difference(superMethod.getModifiers(), Set.of(Modifier.NATIVE))`) is also not sufficient because of the `@HotSpotIntrinsicCandidate` annotation in `Object#hashCode` (see [line 100-107](https://github.com/google/error-prone/blob/56dfc7912b6300bae8706b241c19054a582be79b/core/src/main/java/com/google/errorprone/bugpatterns/RedundantOverride.java#L100-L107)).
My failing test in `RedundantOverrideTest`:
```java
@Test
public void overridingHashCode() {
testHelper
.addSourceLines(
"Test.java",
"class Test {",
" // BUG: Diagnostic contains:",
" @Override public int hashCode() {",
" return super.hashCode();",
" }",
"}")
.doTest();
}
```
Contributor guide
Assessment
This issue has not been assessed yet.