[java-inspections] EqualsAndHashcode: do not report Java records that have hashCode but no equals (IDEA-264394)

GitOrigin-RevId: 15f83c984ebb807f9966407bf03a7e402c3ffded
This commit is contained in:
Tagir Valeev
2021-03-17 03:02:05 +00:00
committed by intellij-monorepo-bot
parent 8c00bc7cca
commit 1e53d86ca5
4 changed files with 29 additions and 0 deletions
@@ -58,6 +58,10 @@ public class EqualsAndHashcodeBase extends AbstractBaseJavaLocalInspectionTool {
boolean [] hasHashCode = {false};
processClass(aClass, hasEquals, hasHashCode, myEquals, myHashCode);
if (hasEquals[0] != hasHashCode[0]) {
if (hasHashCode[0] && aClass.isRecord()) {
// Probably better distributed hashCode is implemented for a record class where default equals works fine
return;
}
PsiIdentifier identifier = aClass.getNameIdentifier();
holder.registerProblem(identifier != null ? identifier : aClass,
hasEquals[0]
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems/>
@@ -0,0 +1,13 @@
public record Pixel(int x,int y) implements Comparable<Pixel> {
@Override
public int hashCode(){
return x*2880+y; // for better distribution
}
@Override
public int compareTo(Pixel o){
int result = Integer.compare(x,o.x);
if(result==0) result = Integer.compare(y,o.y);
return result;
}
}
@@ -19,8 +19,15 @@ package com.intellij.java.codeInspection;
import com.intellij.JavaTestUtil;
import com.intellij.codeInspection.equalsAndHashcode.EqualsAndHashcode;
import com.intellij.testFramework.JavaInspectionTestCase;
import com.intellij.testFramework.LightProjectDescriptor;
import org.jetbrains.annotations.NotNull;
public class EqualsAndHashCodeTest extends JavaInspectionTestCase {
@Override
protected @NotNull LightProjectDescriptor getProjectDescriptor() {
return JAVA_16;
}
private EqualsAndHashcode myTool = new EqualsAndHashcode();
@Override
@@ -47,4 +54,7 @@ public class EqualsAndHashCodeTest extends JavaInspectionTestCase {
doTest();
}
public void testRecord() {
doTest();
}
}