Java: use Objects.hashCode() for single field JDK7+ hashCode() generation (IDEA-177907)

GitOrigin-RevId: 59011b448a85df06ef0b1a5960ab3bf7c77bc32f
This commit is contained in:
Bas Leijdekkers
2023-11-16 18:15:43 +01:00
committed by intellij-monorepo-bot
parent 9bcb2a6194
commit cfc675690d
5 changed files with 35 additions and 6 deletions

View File

@@ -1,6 +1,10 @@
public int hashCode() {
#if (!$superHasHashCode && $fields.size()==1 && $fields[0].array)
return java.util.Arrays.hashCode($fields[0].accessor);
#if (!$superHasHashCode && $fields.size()==1)
#if ($fields[0].array)
return java.util.Arrays.hashCode($fields[0].accessor);
#else
return java.util.Objects.hashCode($fields[0].accessor);
#end
#else
#set($hasArrays = false)
#set($hasNoArrays = false)
@@ -20,7 +24,7 @@ public int hashCode() {
#end
#foreach($field in $fields)
#if ($i > 0)
, ##
, ##
#end
$field.accessor ##
#set($i = $i + 1)
@@ -41,7 +45,7 @@ public int hashCode() {
#foreach($field in $fields)
#if(!$field.array)
#if ($i > 0)
, ##
, ##
#end
$field.accessor ##
#set($i = $i + 1)
@@ -60,7 +64,7 @@ public int hashCode() {
#if ($resultDeclarationCompleted)
$resultName ##
#end
= ##
= ##
#if ($resultAssigned)
31 * $resultName + ##
#end

View File

@@ -13,6 +13,6 @@ class A {
@Override
public int hashCode() {
return Objects.hash(a);
return Objects.hashCode(a);
}
}

View File

@@ -0,0 +1,18 @@
import java.util.Objects;
class X {
private String s = null;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final X x = (X) o;
return Objects.equals(s, x.s);
}
@Override
public int hashCode() {
return Objects.hashCode(s);
}
}

View File

@@ -0,0 +1,3 @@
class X {
private String s = null;
}

View File

@@ -134,6 +134,10 @@ public class GenerateEqualsTest extends LightJavaCodeInsightTestCase {
doTestWithTemplate(EqualsHashCodeTemplatesManager.JAVA_UTIL_OBJECTS_EQUALS_AND_HASH_CODE);
}
public void testSingleFieldWithObjectsTemplate() {
doTestWithTemplate(EqualsHashCodeTemplatesManager.JAVA_UTIL_OBJECTS_EQUALS_AND_HASH_CODE);
}
public void testArrayAndNotOnlyArrayWithObjectsTemplate() {
doTestWithTemplate(EqualsHashCodeTemplatesManager.JAVA_UTIL_OBJECTS_EQUALS_AND_HASH_CODE);
}