diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm b/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm index e4c51becd08c..a37759ce7bd8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm +++ b/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm @@ -78,11 +78,12 @@ public int hashCode() { #end ## #macro(adjustHashCodeToArrays $field) -#if ($field.array && $java_version > 4) -#if ($field.nestedArray) -// Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode + #if ($field.array && $java_version > 4) + #if ($field.nestedArray) + java.util.Arrays.deepHashCode($field.accessor)## + #else + java.util.Arrays.hashCode($field.accessor)## #end - java.util.Arrays.hashCode($field.accessor)## #else ${field.accessor}.hashCode()## #end diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/objectsEquals.vm b/java/java-impl/src/com/intellij/codeInsight/generation/objectsEquals.vm index 5e240f9f73d2..f87075daf08e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/objectsEquals.vm +++ b/java/java-impl/src/com/intellij/codeInsight/generation/objectsEquals.vm @@ -13,15 +13,7 @@ Object $paramName){ && #end #set($i = $i + 1) - #if ($field.array) - #if ($field.nestedArray) -java.util.Arrays.deepEquals($field.accessor, ${classInstanceName}.$field.accessor)## - #else -java.util.Arrays.equals($field.accessor, ${classInstanceName}.$field.accessor)## - #end - #else java.util.Objects.equals($field.accessor, ${classInstanceName}.$field.accessor)## - #end #end ; } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java b/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java index c97281035edd..dca0073b3c7b 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java @@ -21,8 +21,7 @@ class Test { public int hashCode() { int result = myOs != null ? Arrays.hashCode(myOs) : 0; - result = 31 * result + (myIIs != null ? // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(myIIs) : 0); + result = 31 * result + (myIIs != null ? Arrays.deepHashCode(myIIs) : 0); result = 31 * result + (myIs != null ? Arrays.hashCode(myIs) : 0); return result; } diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java index fc6c3314aeff..b81281d9e49b 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java @@ -51,14 +51,11 @@ class A { int result; long temp; result = a1 != null ? Arrays.hashCode(a1) : 0; - result = 31 * result + (a2 != null ? // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a2) : 0); + result = 31 * result + (a2 != null ? Arrays.deepHashCode(a2) : 0); result = 31 * result + (a3 != null ? Arrays.hashCode(a3) : 0); - result = 31 * result + (a4 != null ? // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a4) : 0); + result = 31 * result + (a4 != null ? Arrays.deepHashCode(a4) : 0); result = 31 * result + (a5 != null ? Arrays.hashCode(a5) : 0); - result = 31 * result + (a6 != null ? // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a6) : 0); + result = 31 * result + (a6 != null ? Arrays.deepHashCode(a6) : 0); result = 31 * result + (int) a7; result = 31 * result + (int) a8; result = 31 * result + a9; diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java index 6465e3455ad8..98a7fa6c18bf 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java @@ -51,14 +51,11 @@ class A { int result; long temp; result = Arrays.hashCode(a1); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a2); + result = 31 * result + Arrays.deepHashCode(a2); result = 31 * result + Arrays.hashCode(a3); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a4); + result = 31 * result + Arrays.deepHashCode(a4); result = 31 * result + Arrays.hashCode(a5); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a6); + result = 31 * result + Arrays.deepHashCode(a6); result = 31 * result + (int) a7; result = 31 * result + (int) a8; result = 31 * result + a9; diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java index c807dcf489de..69bf70d1ec08 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java @@ -99,14 +99,11 @@ class A { int result; long temp; result = getA1() != null ? Arrays.hashCode(getA1()) : 0; - result = 31 * result + (getA2() != null ? // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(getA2()) : 0); + result = 31 * result + (getA2() != null ? Arrays.deepHashCode(getA2()) : 0); result = 31 * result + (getA3() != null ? Arrays.hashCode(getA3()) : 0); - result = 31 * result + (getA4() != null ? // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(getA4()) : 0); + result = 31 * result + (getA4() != null ? Arrays.deepHashCode(getA4()) : 0); result = 31 * result + (getA5() != null ? Arrays.hashCode(getA5()) : 0); - result = 31 * result + (getA6() != null ? // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(getA6()) : 0); + result = 31 * result + (getA6() != null ? Arrays.deepHashCode(getA6()) : 0); result = 31 * result + (int) getA7(); result = 31 * result + (int) getA8(); result = 31 * result + getA9(); diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java index 29b89feff7d2..5a3e505e01e8 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java @@ -47,14 +47,11 @@ class A { @Override public int hashCode() { int result = Arrays.hashCode(a1); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a2); + result = 31 * result + Arrays.deepHashCode(a2); result = 31 * result + Arrays.hashCode(a3); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a4); + result = 31 * result + Arrays.deepHashCode(a4); result = 31 * result + Arrays.hashCode(a5); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a6); + result = 31 * result + Arrays.deepHashCode(a6); result = 31 * result + (int) a7; result = 31 * result + (int) a8; result = 31 * result + a9; diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java index 5ce0416adf60..629408b134ca 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java @@ -63,14 +63,11 @@ class A extends B { int result = super.hashCode(); long temp; result = 31 * result + Arrays.hashCode(a1); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a2); + result = 31 * result + Arrays.deepHashCode(a2); result = 31 * result + Arrays.hashCode(a3); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a4); + result = 31 * result + Arrays.deepHashCode(a4); result = 31 * result + Arrays.hashCode(a5); - result = 31 * result + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a6); + result = 31 * result + Arrays.deepHashCode(a6); result = 31 * result + (int) a7; result = 31 * result + (int) a8; result = 31 * result + a9; diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java b/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java index ff36c08a04e0..37194104a2ed 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java @@ -51,14 +51,11 @@ class A { int result1; long temp1; result1 = Arrays.hashCode(a1); - result1 = 31 * result1 + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a2); + result1 = 31 * result1 + Arrays.deepHashCode(a2); result1 = 31 * result1 + Arrays.hashCode(a3); - result1 = 31 * result1 + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a4); + result1 = 31 * result1 + Arrays.deepHashCode(a4); result1 = 31 * result1 + Arrays.hashCode(a5); - result1 = 31 * result1 + // Probably incorrect - hashCode for high dimension arrays with Arrays.hashCode - Arrays.hashCode(a6); + result1 = 31 * result1 + Arrays.deepHashCode(a6); result1 = 31 * result1 + (int) a7; result1 = 31 * result1 + (int) a8; result1 = 31 * result1 + a9;