| CARVIEW |
Navigation Menu
-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Affects PMD Version:
7.17.0
Rule:
OverrideBothEqualsAndHashCodeOnComparable: https://docs.pmd-code.org/pmd-doc-7.17.0/pmd_rules_java_errorprone.html#overridebothequalsandhashcodeoncomparable
Description:
Record classes have their hashCode and equals methods automatically implemented.
IntelliJ IDEA’s inspection ComparableImplementedButEqualsNotOverridden does not flag record classes as violations. Since OverrideBothEqualsAndHashCodeOnComparable was originally inspired by IDEA (#5837), PMD should also exclude record classes from this rule.
Reference: https://docs.oracle.com/javase/specs/jls/se17/html/jls-8.html#jls-8.10.3
Reference: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)
Code Sample demonstrating the issue:
Adapted from https://www.jetbrains.com/help/inspectopedia/ComparableImplementedButEqualsNotOverridden.html:
record Foo(int cm) implements Comparable<Foo> {
@Override
public int compareTo(Foo o) {
if (cm == o.cm) {
return 0;
}
return cm < o.cm ? -1 : 1;
}
}
class Bar implements Comparable<Bar> {
private final int cm;
public Bar(int cm) {
this.cm = cm;
}
@Override
public int compareTo(Bar o) {
if (cm == o.cm) {
return 0;
}
return cm < o.cm ? -1 : 1;
}
}Expected outcome:
OverrideBothEqualsAndHashCodeOnComparable should not be required for record classes.
Running PMD through: Gradle
