mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-inspections] EqualsAndHashcode: do not report Java records that have hashCode but no equals (IDEA-264394)
GitOrigin-RevId: 15f83c984ebb807f9966407bf03a7e402c3ffded
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8c00bc7cca
commit
1e53d86ca5
+4
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user