google / google/error-prone

`RedundantOverride` does not flag redundant `Object#hashCode` override

Open
#3,166 0 comments 1 reaction 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.