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:
Anna Kozlova
2015-05-12 16:04:21 +02:00
parent fdbfd64350
commit 6a6b9f5226
5 changed files with 32 additions and 0 deletions

View File

@@ -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

View File

@@ -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
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,4 @@
class A {
int[] a1;
<caret>
}

View File

@@ -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);