diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcodeBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcodeBase.java index b21c8b7457b7..0ec319ce010c 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcodeBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcodeBase.java @@ -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] diff --git a/java/java-tests/testData/inspection/equalsAndHashcode/record/expected.xml b/java/java-tests/testData/inspection/equalsAndHashcode/record/expected.xml new file mode 100644 index 000000000000..c63c9258595e --- /dev/null +++ b/java/java-tests/testData/inspection/equalsAndHashcode/record/expected.xml @@ -0,0 +1,2 @@ + + diff --git a/java/java-tests/testData/inspection/equalsAndHashcode/record/src/Pixel.java b/java/java-tests/testData/inspection/equalsAndHashcode/record/src/Pixel.java new file mode 100644 index 000000000000..b37d01c2b971 --- /dev/null +++ b/java/java-tests/testData/inspection/equalsAndHashcode/record/src/Pixel.java @@ -0,0 +1,13 @@ +public record Pixel(int x,int y) implements Comparable { + @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; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/EqualsAndHashCodeTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/EqualsAndHashCodeTest.java index b002f4132dbd..d784b86e9544 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/EqualsAndHashCodeTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/EqualsAndHashCodeTest.java @@ -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(); + } }