mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
java.util.Objects equals/hashCode: use Arrays for array fields, ensure single array is not passed to Objects.hashCode vararg to avoid confusion (IDEA-140111)
This commit is contained in:
@@ -21,6 +21,8 @@ Object $paramName){
|
||||
#end
|
||||
#elseif ($field.enum)
|
||||
#addPrimitiveFieldComparisonCondition($field) ##
|
||||
#elseif ($field.array)
|
||||
java.util.Arrays.equals($field.accessor, ${classInstanceName}.$field.accessor)##
|
||||
#else
|
||||
java.util.Objects.equals($field.accessor, ${classInstanceName}.$field.accessor)##
|
||||
#end
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
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)
|
||||
@@ -13,4 +16,5 @@ public int hashCode() {
|
||||
#set($i = $i + 1)
|
||||
#end
|
||||
);
|
||||
#end
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import java.util.Arrays;
|
||||
|
||||
class A {
|
||||
int[] a1;
|
||||
|
||||
@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 Arrays.equals(a1, a.a1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Arrays.hashCode(a1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
class A {
|
||||
int[] a1;
|
||||
<caret>
|
||||
}
|
||||
@@ -59,6 +59,10 @@ public class GenerateEquals15Test extends GenerateEqualsTestCase {
|
||||
doTestWithTemplate(EqualsHashCodeTemplatesManager.OBJECTS_EQUAL_AND_HASH_CODE_GUAVA);
|
||||
}
|
||||
|
||||
public void testSingleArrayOfPrimitiveWithObjectsTemplate() 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