mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
support for arrays in template j.u.Objects.equals/hashCode (IDEA-162302)
This commit is contained in:
@@ -2,19 +2,75 @@ public int hashCode() {
|
||||
#if (!$superHasHashCode && $fields.size()==1 && $fields[0].array)
|
||||
return java.util.Arrays.hashCode($fields[0].accessor);
|
||||
#else
|
||||
return java.util.Objects.hash(##
|
||||
#set($i = 0)
|
||||
#if($superHasHashCode)
|
||||
super.hashCode() ##
|
||||
#set($i = 1)
|
||||
#set($hasArrays = false)
|
||||
#set($hasNoArrays = false)
|
||||
#foreach($field in $fields)
|
||||
#if ($field.array)
|
||||
#set($hasArrays = true)
|
||||
#else
|
||||
#set($hasNoArrays = true)
|
||||
#end
|
||||
#end
|
||||
|
||||
#if (!$hasArrays)
|
||||
return java.util.Objects.hash(##
|
||||
#set($i = 0)
|
||||
#if($superHasHashCode)
|
||||
super.hashCode() ##
|
||||
#set($i = 1)
|
||||
#end
|
||||
#foreach($field in $fields)
|
||||
#if ($i > 0)
|
||||
, ##
|
||||
#end
|
||||
$field.accessor ##
|
||||
#set($i = $i + 1)
|
||||
#end
|
||||
);
|
||||
#else
|
||||
#set($resultName = $helper.getUniqueLocalVarName("result", $fields, $settings))
|
||||
#set($resultAssigned = false)
|
||||
#set($resultDeclarationCompleted = false)
|
||||
int $resultName ##
|
||||
#if($hasNoArrays)
|
||||
= java.util.Objects.hash(##
|
||||
#set($i = 0)
|
||||
#if($superHasHashCode)
|
||||
super.hashCode() ##
|
||||
#set($i = 1)
|
||||
#end
|
||||
#foreach($field in $fields)
|
||||
#if(!$field.array)
|
||||
#if ($i > 0)
|
||||
, ##
|
||||
#end
|
||||
$field.accessor ##
|
||||
#set($i = $i + 1)
|
||||
#end
|
||||
#end
|
||||
);
|
||||
#set($resultAssigned = true)
|
||||
#set($resultDeclarationCompleted = true)
|
||||
#elseif($superHasHashCode)
|
||||
= super.hashCode(); ##
|
||||
#set($resultAssigned = true)
|
||||
#set($resultDeclarationCompleted = true)
|
||||
#end
|
||||
#foreach($field in $fields)
|
||||
#if ($i > 0)
|
||||
, ##
|
||||
#if($field.array)
|
||||
#if ($resultDeclarationCompleted)
|
||||
$resultName ##
|
||||
#end
|
||||
= ##
|
||||
#if ($resultAssigned)
|
||||
31 * $resultName + ##
|
||||
#end
|
||||
java.util.Arrays.hashCode($field.accessor);
|
||||
#set($resultAssigned = true)
|
||||
#set($resultDeclarationCompleted = true)
|
||||
#end
|
||||
$field.accessor ##
|
||||
#set($i = $i + 1)
|
||||
#end
|
||||
);
|
||||
#end
|
||||
return $resultName;
|
||||
#end
|
||||
#end
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
|
||||
class A {
|
||||
int i;
|
||||
String s;
|
||||
int[] a1;
|
||||
int[] a2;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
final A a = (A) o;
|
||||
return i == a.i &&
|
||||
Objects.equals(s, a.s) &&
|
||||
Arrays.equals(a1, a.a1) &&
|
||||
Arrays.equals(a2, a.a2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
|
||||
int result = Objects.hash(i, s);
|
||||
result = 31 * result + Arrays.hashCode(a1);
|
||||
result = 31 * result + Arrays.hashCode(a2);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
import java.util.Arrays;
|
||||
|
||||
class I {
|
||||
public int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
public boolean equals(Object o) {
|
||||
return o == this;
|
||||
}
|
||||
}
|
||||
class A extends I {
|
||||
int[] a1;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
final A a = (A) o;
|
||||
return Arrays.equals(a1, a.a1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + Arrays.hashCode(a1);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class A {
|
||||
int i;
|
||||
String s;
|
||||
int[] a1;
|
||||
int[] a2;
|
||||
<caret>
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
class I {
|
||||
public int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
public boolean equals(Object o) {
|
||||
return o == this;
|
||||
}
|
||||
}
|
||||
class A extends I {
|
||||
int[] a1;
|
||||
|
||||
<caret>
|
||||
}
|
||||
@@ -68,6 +68,14 @@ public class GenerateEquals15Test extends GenerateEqualsTestCase {
|
||||
doTestWithTemplate(EqualsHashCodeTemplatesManager.JAVA_UTIL_OBJECTS_EQUALS_AND_HASH_CODE);
|
||||
}
|
||||
|
||||
public void testArrayAndNotOnlyArrayWithObjectsTemplate() throws Exception {
|
||||
doTestWithTemplate(EqualsHashCodeTemplatesManager.JAVA_UTIL_OBJECTS_EQUALS_AND_HASH_CODE);
|
||||
}
|
||||
|
||||
public void testArrayAndSuperWithObjectsTemplate() throws Exception {
|
||||
doTestWithTemplate(EqualsHashCodeTemplatesManager.JAVA_UTIL_OBJECTS_EQUALS_AND_HASH_CODE);
|
||||
}
|
||||
|
||||
private void doTestWithTemplate(String templateName) throws Exception {
|
||||
try {
|
||||
EqualsHashCodeTemplatesManager.getInstance().setDefaultTemplate(templateName);
|
||||
|
||||
Reference in New Issue
Block a user