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();
+ }
}