From e8d2bff198206dd3b5cd5c367670186243bde835 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 4 Dec 2023 20:28:28 +0100 Subject: [PATCH] Java: generate compact equals when using IntelliJ Default (IDEA-339226) GitOrigin-RevId: dd90f8e079a2693d74a220ef95aca3223c105fa9 --- .../codeInsight/generation/defaultEquals.vm | 28 +++++++++------ .../codeInsight/generation/defaultHashCode.vm | 2 ++ .../afterAbstractSuperEquals.java | 1 - ...rayAndNotOnlyArrayWithObjectsTemplate.java | 5 ++- .../generateEquals/afterArrays.java | 9 ++--- .../generateEquals/afterArraysClass.java | 5 +-- .../generateEquals/afterArraysFromJava15.java | 9 ++--- .../afterClassWithTypeParams.java | 5 +-- .../generateEquals/afterDifferentTypes.java | 36 +++++++++---------- .../afterDifferentTypesAllNotNull.java | 31 ++++++++-------- .../afterDifferentTypesGetters.java | 36 +++++++++---------- .../afterDifferentTypesNoDouble.java | 29 +++++++-------- ...rDifferentTypesSuperEqualsAndHashCode.java | 31 ++++++++-------- ...erentTypesSuperEqualsAndHashCodeGuava.java | 15 +++++++- .../generateEquals/afterFields.java | 9 ++--- .../generateEquals/afterHashCode.java | 15 ++++---- .../generateEquals/afterInsertOverride.java | 5 +-- .../generateEquals/afterInstanceof.java | 9 ++--- .../generateEquals/afterLangClass.java | 5 +-- .../generateEquals/afterLocalLangClass.java | 5 +-- .../generateEquals/afterNameConflicts.java | 31 ++++++++-------- .../generateEquals/afterNoBaseEquals.java | 1 - .../generateEquals/afterNotNull.java | 9 +++-- .../generateEquals/afterOneDoubleField.java | 5 +-- .../afterOneDoubleFieldJava8.java | 5 +-- .../generateEquals/afterOneField.java | 9 +++-- .../generateEquals/afterOneFloatField.java | 5 +-- .../generateEquals/afterPrefixes.java | 5 +-- .../generateEquals/afterPrimitiveFields.java | 7 +--- .../afterPrimitiveFieldsJava8.java | 17 ++++----- .../generateEquals/afterSuperEquals.java | 1 - .../java/codeInsight/GenerateEqualsTest.java | 6 ++++ 32 files changed, 177 insertions(+), 214 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/defaultEquals.vm b/java/java-impl/src/com/intellij/codeInsight/generation/defaultEquals.vm index 89571c5dcfe0..f621784c14de 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/defaultEquals.vm +++ b/java/java-impl/src/com/intellij/codeInsight/generation/defaultEquals.vm @@ -12,8 +12,13 @@ Object $paramName){ #if ($fields.size() > 0) #addClassInstance() - + return ## + #set($i = 0) #foreach($field in $fields) + #if ($i > 0) + && ## + #end + #set($i = $i + 1) #if ($field.array) #addArrayEquals($field) #elseif ($field.primitive) @@ -28,39 +33,42 @@ Object $paramName){ #addFieldComparison($field) #end #end -#end - + ; +#else return true; +#end } ## #macro(addPrimitiveFieldComparison $field) - if($field.accessor != ${classInstanceName}.$field.accessor) return false; + $field.accessor == ${classInstanceName}.$field.accessor## #end ## #macro(addDoubleFieldComparison $field) #if ($field.double) - if(java.lang.Double.compare($field.accessor, ${classInstanceName}.$field.accessor) != 0)return false; + java.lang.Double.compare($field.accessor, ${classInstanceName}.$field.accessor) == 0## #else - if(java.lang.Float.compare($field.accessor, ${classInstanceName}.$field.accessor) != 0)return false; + java.lang.Float.compare($field.accessor, ${classInstanceName}.$field.accessor) == 0## #end #end ## #macro(addFieldComparison $field) #if ($field.notNull) - if(!${field.accessor}.equals(${classInstanceName}.$field.accessor))return false; + ${field.accessor}.equals(${classInstanceName}.$field.accessor)## + #elseif ($java_version < 7) + ($field.accessor == null ? ${classInstanceName}.$field.accessor == null : ${field.accessor}.equals(${classInstanceName}.$field.accessor))## #else - if($field.accessor != null ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : ${classInstanceName}.$field.accessor != null)return false; + java.util.Objects.equals($field.accessor,${classInstanceName}.$field.accessor)## #end #end ## #macro(addArrayEquals $field) #if ($field.nestedArray) #if ($java_version > 4) - if(!java.util.Arrays.deepEquals($field.accessor, ${classInstanceName}.$field.accessor)) return false; + java.util.Arrays.deepEquals($field.accessor, ${classInstanceName}.$field.accessor)## #else // Compare nested arrays - values of $field.name here #end #break; #end - if(!java.util.Arrays.equals($field.accessor, ${classInstanceName}.$field.accessor)) return false; + java.util.Arrays.equals($field.accessor, ${classInstanceName}.$field.accessor)## #end \ No newline at end of file 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 a3a5e1b67f53..744858223548 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm +++ b/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm @@ -138,6 +138,8 @@ public int hashCode() { #set($name = $field.accessor) #if ($field.notNull)#adjustHashCodeToArrays($field) #elseif ($field.array && $java_version > 4)#adjustHashCodeToArrays($field) + #elseif ($java_version >= 7) + java.util.Objects.hashCode($field.accessor) ## #else #if ($brace)(## #end diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterAbstractSuperEquals.java b/java/java-tests/testData/codeInsight/generateEquals/afterAbstractSuperEquals.java index 61d03b795d74..ea0a14ed1886 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterAbstractSuperEquals.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterAbstractSuperEquals.java @@ -5,7 +5,6 @@ class Test extends SuperTest { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - return true; } diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterArrayAndNotOnlyArrayWithObjectsTemplate.java b/java/java-tests/testData/codeInsight/generateEquals/afterArrayAndNotOnlyArrayWithObjectsTemplate.java index 9d43543d3edc..8cfde8c947c7 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterArrayAndNotOnlyArrayWithObjectsTemplate.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterArrayAndNotOnlyArrayWithObjectsTemplate.java @@ -12,7 +12,10 @@ class A { 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) && Objects.deepEquals(a1, a.a1) && Objects.deepEquals(a2, a.a2); + return i == a.i && + Objects.equals(s, a.s) && + Objects.deepEquals(a1, a.a1) && + Objects.deepEquals(a2, a.a2); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterArrays.java b/java/java-tests/testData/codeInsight/generateEquals/afterArrays.java index 826874739aec..24c9633b3a81 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterArrays.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterArrays.java @@ -10,12 +10,9 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (!Arrays.equals(myOs, test.myOs)) return false; - if (!Arrays.deepEquals(myIIs, test.myIIs)) return false; - if (!Arrays.equals(myIs, test.myIs)) return false; - - return true; + return Arrays.equals(myOs, test.myOs) && + Arrays.deepEquals(myIIs, test.myIIs) && + Arrays.equals(myIs, test.myIs); } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterArraysClass.java b/java/java-tests/testData/codeInsight/generateEquals/afterArraysClass.java index 4a8936e30b18..b43832b0e4c1 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterArraysClass.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterArraysClass.java @@ -7,10 +7,7 @@ class Arrays { if (o == null || getClass() != o.getClass()) return false; final Arrays arrays = (Arrays) o; - - if (!java.util.Arrays.equals(i, arrays.i)) return false; - - return true; + return java.util.Arrays.equals(i, arrays.i); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java b/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java index 826874739aec..24c9633b3a81 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterArraysFromJava15.java @@ -10,12 +10,9 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (!Arrays.equals(myOs, test.myOs)) return false; - if (!Arrays.deepEquals(myIIs, test.myIIs)) return false; - if (!Arrays.equals(myIs, test.myIs)) return false; - - return true; + return Arrays.equals(myOs, test.myOs) && + Arrays.deepEquals(myIIs, test.myIIs) && + Arrays.equals(myIs, test.myIs); } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterClassWithTypeParams.java b/java/java-tests/testData/codeInsight/generateEquals/afterClassWithTypeParams.java index aa9e4fc8e56f..454a8074f6f6 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterClassWithTypeParams.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterClassWithTypeParams.java @@ -9,10 +9,7 @@ class A { if (o == null || getClass() != o.getClass()) return false; final A a = (A) o; - - if (!Arrays.equals(a1, a.a1)) return false; - - return true; + return Arrays.equals(a1, a.a1); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java index 97766fb4952a..8ba37ffe2eec 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypes.java @@ -1,4 +1,5 @@ import java.util.Arrays; +import java.util.Objects; class A { Object[] a1; @@ -25,23 +26,20 @@ class A { if (o == null || getClass() != o.getClass()) return false; final A a = (A) o; - - if (a7 != a.a7) return false; - if (a8 != a.a8) return false; - if (a9 != a.a9) return false; - if (a10 != a.a10) return false; - if (Float.compare(a11, a.a11) != 0) return false; - if (Double.compare(a12, a.a12) != 0) return false; - if (!Arrays.equals(a1, a.a1)) return false; - if (!Arrays.deepEquals(a2, a.a2)) return false; - if (!Arrays.equals(a3, a.a3)) return false; - if (!Arrays.deepEquals(a4, a.a4)) return false; - if (!Arrays.equals(a5, a.a5)) return false; - if (!Arrays.deepEquals(a6, a.a6)) return false; - if (a13 != null ? !a13.equals(a.a13) : a.a13 != null) return false; - if (a14 != null ? !a14.equals(a.a14) : a.a14 != null) return false; - - return true; + return a7 == a.a7 && + a8 == a.a8 && + a9 == a.a9 && + a10 == a.a10 && + Float.compare(a11, a.a11) == 0 && + Double.compare(a12, a.a12) == 0 && + Arrays.equals(a1, a.a1) && + Arrays.deepEquals(a2, a.a2) && + Arrays.equals(a3, a.a3) && + Arrays.deepEquals(a4, a.a4) && + Arrays.equals(a5, a.a5) && + Arrays.deepEquals(a6, a.a6) && + Objects.equals(a13, a.a13) && + Objects.equals(a14, a.a14); } @Override @@ -61,8 +59,8 @@ class A { result = 31 * result + Float.floatToIntBits(a11); temp = Double.doubleToLongBits(a12); result = 31 * result + (int) (temp ^ (temp >>> 32)); - result = 31 * result + (a13 != null ? a13.hashCode() : 0); - result = 31 * result + (a14 != null ? a14.hashCode() : 0); + result = 31 * result + Objects.hashCode(a13); + result = 31 * result + Objects.hashCode(a14); return result; } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java index d71936076526..892dd1cd88aa 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesAllNotNull.java @@ -25,23 +25,20 @@ class A { if (o == null || getClass() != o.getClass()) return false; final A a = (A) o; - - if (a7 != a.a7) return false; - if (a8 != a.a8) return false; - if (a9 != a.a9) return false; - if (a10 != a.a10) return false; - if (Float.compare(a11, a.a11) != 0) return false; - if (Double.compare(a12, a.a12) != 0) return false; - if (!Arrays.equals(a1, a.a1)) return false; - if (!Arrays.deepEquals(a2, a.a2)) return false; - if (!Arrays.equals(a3, a.a3)) return false; - if (!Arrays.deepEquals(a4, a.a4)) return false; - if (!Arrays.equals(a5, a.a5)) return false; - if (!Arrays.deepEquals(a6, a.a6)) return false; - if (!a13.equals(a.a13)) return false; - if (!a14.equals(a.a14)) return false; - - return true; + return a7 == a.a7 && + a8 == a.a8 && + a9 == a.a9 && + a10 == a.a10 && + Float.compare(a11, a.a11) == 0 && + Double.compare(a12, a.a12) == 0 && + Arrays.equals(a1, a.a1) && + Arrays.deepEquals(a2, a.a2) && + Arrays.equals(a3, a.a3) && + Arrays.deepEquals(a4, a.a4) && + Arrays.equals(a5, a.a5) && + Arrays.deepEquals(a6, a.a6) && + a13.equals(a.a13) && + a14.equals(a.a14); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java index a0355d0b0a4c..f8bd939e5e5a 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesGetters.java @@ -1,4 +1,5 @@ import java.util.Arrays; +import java.util.Objects; class A { Object[] a1; @@ -73,23 +74,20 @@ class A { if (o == null || getClass() != o.getClass()) return false; final A a = (A) o; - - if (getA7() != a.getA7()) return false; - if (getA8() != a.getA8()) return false; - if (getA9() != a.getA9()) return false; - if (getA10() != a.getA10()) return false; - if (Float.compare(getA11(), a.getA11()) != 0) return false; - if (Double.compare(getA12(), a.getA12()) != 0) return false; - if (!Arrays.equals(getA1(), a.getA1())) return false; - if (!Arrays.deepEquals(getA2(), a.getA2())) return false; - if (!Arrays.equals(getA3(), a.getA3())) return false; - if (!Arrays.deepEquals(getA4(), a.getA4())) return false; - if (!Arrays.equals(getA5(), a.getA5())) return false; - if (!Arrays.deepEquals(getA6(), a.getA6())) return false; - if (a13 != null ? !a13.equals(a.a13) : a.a13 != null) return false; - if (a14 != null ? !a14.equals(a.a14) : a.a14 != null) return false; - - return true; + return getA7() == a.getA7() && + getA8() == a.getA8() && + getA9() == a.getA9() && + getA10() == a.getA10() && + Float.compare(getA11(), a.getA11()) == 0 && + Double.compare(getA12(), a.getA12()) == 0 && + Arrays.equals(getA1(), a.getA1()) && + Arrays.deepEquals(getA2(), a.getA2()) && + Arrays.equals(getA3(), a.getA3()) && + Arrays.deepEquals(getA4(), a.getA4()) && + Arrays.equals(getA5(), a.getA5()) && + Arrays.deepEquals(getA6(), a.getA6()) && + Objects.equals(a13, a.a13) && + Objects.equals(a14, a.a14); } @Override @@ -109,8 +107,8 @@ class A { result = 31 * result + Float.floatToIntBits(getA11()); temp = Double.doubleToLongBits(getA12()); result = 31 * result + (int) (temp ^ (temp >>> 32)); - result = 31 * result + (a13 != null ? a13.hashCode() : 0); - result = 31 * result + (a14 != null ? a14.hashCode() : 0); + result = 31 * result + Objects.hashCode(a13); + result = 31 * result + Objects.hashCode(a14); return result; } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java index 07dd818c153c..ce7f30fc4021 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesNoDouble.java @@ -24,22 +24,19 @@ class A { if (o == null || getClass() != o.getClass()) return false; final A a = (A) o; - - if (a7 != a.a7) return false; - if (a8 != a.a8) return false; - if (a9 != a.a9) return false; - if (a10 != a.a10) return false; - if (Float.compare(a11, a.a11) != 0) return false; - if (!Arrays.equals(a1, a.a1)) return false; - if (!Arrays.deepEquals(a2, a.a2)) return false; - if (!Arrays.equals(a3, a.a3)) return false; - if (!Arrays.deepEquals(a4, a.a4)) return false; - if (!Arrays.equals(a5, a.a5)) return false; - if (!Arrays.deepEquals(a6, a.a6)) return false; - if (!a13.equals(a.a13)) return false; - if (!a14.equals(a.a14)) return false; - - return true; + return a7 == a.a7 && + a8 == a.a8 && + a9 == a.a9 && + a10 == a.a10 && + Float.compare(a11, a.a11) == 0 && + Arrays.equals(a1, a.a1) && + Arrays.deepEquals(a2, a.a2) && + Arrays.equals(a3, a.a3) && + Arrays.deepEquals(a4, a.a4) && + Arrays.equals(a5, a.a5) && + Arrays.deepEquals(a6, a.a6) && + a13.equals(a.a13) && + a14.equals(a.a14); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java index 8b9b41e6f972..e8521c827945 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCode.java @@ -37,23 +37,20 @@ class A extends B { if (!super.equals(o)) return false; final A a = (A) o; - - if (a7 != a.a7) return false; - if (a8 != a.a8) return false; - if (a9 != a.a9) return false; - if (a10 != a.a10) return false; - if (Float.compare(a11, a.a11) != 0) return false; - if (Double.compare(a12, a.a12) != 0) return false; - if (!Arrays.equals(a1, a.a1)) return false; - if (!Arrays.deepEquals(a2, a.a2)) return false; - if (!Arrays.equals(a3, a.a3)) return false; - if (!Arrays.deepEquals(a4, a.a4)) return false; - if (!Arrays.equals(a5, a.a5)) return false; - if (!Arrays.deepEquals(a6, a.a6)) return false; - if (!a13.equals(a.a13)) return false; - if (!a14.equals(a.a14)) return false; - - return true; + return a7 == a.a7 && + a8 == a.a8 && + a9 == a.a9 && + a10 == a.a10 && + Float.compare(a11, a.a11) == 0 && + Double.compare(a12, a.a12) == 0 && + Arrays.equals(a1, a.a1) && + Arrays.deepEquals(a2, a.a2) && + Arrays.equals(a3, a.a3) && + Arrays.deepEquals(a4, a.a4) && + Arrays.equals(a5, a.a5) && + Arrays.deepEquals(a6, a.a6) && + a13.equals(a.a13) && + a14.equals(a.a14); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCodeGuava.java b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCodeGuava.java index b8fc708be97f..4f1e27b71853 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCodeGuava.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterDifferentTypesSuperEqualsAndHashCodeGuava.java @@ -34,7 +34,20 @@ class A extends B { if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; final A a = (A) o; - return a7 == a.a7 && a8 == a.a8 && a9 == a.a9 && a10 == a.a10 && Float.compare(a11, a.a11) == 0 && Double.compare(a12, a.a12) == 0 && com.google.common.base.Objects.equal(a1, a.a1) && com.google.common.base.Objects.equal(a2, a.a2) && com.google.common.base.Objects.equal(a3, a.a3) && com.google.common.base.Objects.equal(a4, a.a4) && com.google.common.base.Objects.equal(a5, a.a5) && com.google.common.base.Objects.equal(a6, a.a6) && com.google.common.base.Objects.equal(a13, a.a13) && com.google.common.base.Objects.equal(a14, a.a14); + return a7 == a.a7 && + a8 == a.a8 && + a9 == a.a9 && + a10 == a.a10 && + Float.compare(a11, a.a11) == 0 && + Double.compare(a12, a.a12) == 0 && + com.google.common.base.Objects.equal(a1, a.a1) && + com.google.common.base.Objects.equal(a2, a.a2) && + com.google.common.base.Objects.equal(a3, a.a3) && + com.google.common.base.Objects.equal(a4, a.a4) && + com.google.common.base.Objects.equal(a5, a.a5) && + com.google.common.base.Objects.equal(a6, a.a6) && + com.google.common.base.Objects.equal(a13, a.a13) && + com.google.common.base.Objects.equal(a14, a.a14); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterFields.java b/java/java-tests/testData/codeInsight/generateEquals/afterFields.java index 763194e8ed96..1134cf42616c 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterFields.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterFields.java @@ -1,3 +1,5 @@ +import java.util.Objects; + class Test { int i; Test a; @@ -8,12 +10,7 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (i != test.i) return false; - if (!a.equals(test.a)) return false; - if (b != null ? !b.equals(test.b) : test.b != null) return false; - - return true; + return i == test.i && a.equals(test.a) && Objects.equals(b, test.b); } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterHashCode.java b/java/java-tests/testData/codeInsight/generateEquals/afterHashCode.java index 01bfdc3311c5..569dd515e20c 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterHashCode.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterHashCode.java @@ -1,3 +1,5 @@ +import java.util.Objects; + class Test { int i; Test a; @@ -9,13 +11,10 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (i != test.i) return false; - if (Double.compare(c, test.c) != 0) return false; - if (!a.equals(test.a)) return false; - if (b != null ? !b.equals(test.b) : test.b != null) return false; - - return true; + return i == test.i && + Double.compare(c, test.c) == 0 && + a.equals(test.a) && + Objects.equals(b, test.b); } public int hashCode() { @@ -23,7 +22,7 @@ class Test { long temp; result = i; result = 31 * result + a.hashCode(); - result = 31 * result + (b != null ? b.hashCode() : 0); + result = 31 * result + Objects.hashCode(b); temp = Double.doubleToLongBits(c); result = 31 * result + (int) (temp ^ (temp >>> 32)); return result; diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterInsertOverride.java b/java/java-tests/testData/codeInsight/generateEquals/afterInsertOverride.java index 142a723a06e3..e9a181b83f1b 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterInsertOverride.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterInsertOverride.java @@ -7,10 +7,7 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (i != test.i) return false; - - return true; + return i == test.i; } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterInstanceof.java b/java/java-tests/testData/codeInsight/generateEquals/afterInstanceof.java index edd2513019a1..e88377f2d499 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterInstanceof.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterInstanceof.java @@ -11,12 +11,9 @@ class A { if (!(o instanceof A)) return false; final A a = (A) o; - - if (value != a.value) return false; - if (!Arrays.equals(values, a.values)) return false; - if (!Arrays.deepEquals(valueses, a.valueses)) return false; - - return true; + return value == a.value && + Arrays.equals(values, a.values) && + Arrays.deepEquals(valueses, a.valueses); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterLangClass.java b/java/java-tests/testData/codeInsight/generateEquals/afterLangClass.java index daf3edf8773b..2e8b50bc0a3e 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterLangClass.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterLangClass.java @@ -7,10 +7,7 @@ class Integer { if (o == null || getClass() != o.getClass()) return false; final Integer integer = (Integer) o; - - if (i != integer.i) return false; - - return true; + return i == integer.i; } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterLocalLangClass.java b/java/java-tests/testData/codeInsight/generateEquals/afterLocalLangClass.java index 2d604e430aa1..ea44628bcfd1 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterLocalLangClass.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterLocalLangClass.java @@ -9,10 +9,7 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Integer integer = (Integer) o; - - if (i != integer.i) return false; - - return true; + return i == integer.i; } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java b/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java index 7073880751a5..aa2fb529656f 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterNameConflicts.java @@ -25,23 +25,20 @@ class A { if (o == null || getClass() != o.getClass()) return false; final A a = (A) o; - - if (a7 != a.a7) return false; - if (a8 != a.a8) return false; - if (a9 != a.a9) return false; - if (a10 != a.a10) return false; - if (Float.compare(a11, a.a11) != 0) return false; - if (Double.compare(temp, a.temp) != 0) return false; - if (!Arrays.equals(a1, a.a1)) return false; - if (!Arrays.deepEquals(a2, a.a2)) return false; - if (!Arrays.equals(a3, a.a3)) return false; - if (!Arrays.deepEquals(a4, a.a4)) return false; - if (!Arrays.equals(a5, a.a5)) return false; - if (!Arrays.deepEquals(a6, a.a6)) return false; - if (!result.equals(a.result)) return false; - if (!a14.equals(a.a14)) return false; - - return true; + return a7 == a.a7 && + a8 == a.a8 && + a9 == a.a9 && + a10 == a.a10 && + Float.compare(a11, a.a11) == 0 && + Double.compare(temp, a.temp) == 0 && + Arrays.equals(a1, a.a1) && + Arrays.deepEquals(a2, a.a2) && + Arrays.equals(a3, a.a3) && + Arrays.deepEquals(a4, a.a4) && + Arrays.equals(a5, a.a5) && + Arrays.deepEquals(a6, a.a6) && + result.equals(a.result) && + a14.equals(a.a14); } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterNoBaseEquals.java b/java/java-tests/testData/codeInsight/generateEquals/afterNoBaseEquals.java index cc6143dcf2f1..055e170196bf 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterNoBaseEquals.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterNoBaseEquals.java @@ -2,7 +2,6 @@ public class Test { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - return true; } diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterNotNull.java b/java/java-tests/testData/codeInsight/generateEquals/afterNotNull.java index 0ca118388bdb..e46c8a0133ce 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterNotNull.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterNotNull.java @@ -1,3 +1,5 @@ +import java.util.Objects; + class Test { @org.jetbrains.annotations.NotNull Object d; @@ -6,13 +8,10 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (d != null ? !d.equals(test.d) : test.d != null) return false; - - return true; + return Objects.equals(d, test.d); } public int hashCode() { - return d != null ? d.hashCode() : 0; + return Objects.hashCode(d); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleField.java b/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleField.java index 95459b568777..6221105be78f 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleField.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleField.java @@ -6,10 +6,7 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (Double.compare(d, test.d) != 0) return false; - - return true; + return Double.compare(d, test.d) == 0; } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleFieldJava8.java b/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleFieldJava8.java index 45c30a22cb33..a356db4d1ffe 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleFieldJava8.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterOneDoubleFieldJava8.java @@ -6,10 +6,7 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (Double.compare(d, test.d) != 0) return false; - - return true; + return Double.compare(d, test.d) == 0; } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterOneField.java b/java/java-tests/testData/codeInsight/generateEquals/afterOneField.java index d8a067833c50..78ff338cd6f0 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterOneField.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterOneField.java @@ -1,3 +1,5 @@ +import java.util.Objects; + class Test { Object d; @@ -6,13 +8,10 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (d != null ? !d.equals(test.d) : test.d != null) return false; - - return true; + return Objects.equals(d, test.d); } public int hashCode() { - return d != null ? d.hashCode() : 0; + return Objects.hashCode(d); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterOneFloatField.java b/java/java-tests/testData/codeInsight/generateEquals/afterOneFloatField.java index ab712341b0f1..c4c9904f4ed4 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterOneFloatField.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterOneFloatField.java @@ -6,10 +6,7 @@ class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (Float.compare(d, test.d) != 0) return false; - - return true; + return Float.compare(d, test.d) == 0; } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterPrefixes.java b/java/java-tests/testData/codeInsight/generateEquals/afterPrefixes.java index 031d22b0e3e2..1fd8c078f8b8 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterPrefixes.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterPrefixes.java @@ -7,10 +7,7 @@ class Simple { if (p_o_r == null || getClass() != p_o_r.getClass()) return false; final Simple l_that_v = (Simple) p_o_r; - - if (simple != l_that_v.simple) return false; - - return true; + return simple == l_that_v.simple; } @Override diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFields.java b/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFields.java index 3d2960df14d3..6c548ca66a0f 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFields.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFields.java @@ -8,12 +8,7 @@ public class Test { if (o == null || getClass() != o.getClass()) return false; final Test test = (Test) o; - - if (f != test.f) return false; - if (j != test.j) return false; - if (h != test.h) return false; - - return true; + return f == test.f && j == test.j && h == test.h; } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFieldsJava8.java b/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFieldsJava8.java index 4cee3e97fcbb..ac732b6fa034 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFieldsJava8.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterPrimitiveFieldsJava8.java @@ -12,16 +12,13 @@ public class X { if (o == null || getClass() != o.getClass()) return false; final X x = (X) o; - - if (l != x.l) return false; - if (b != x.b) return false; - if (v != x.v) return false; - if (s != x.s) return false; - if (i != x.i) return false; - if (Float.compare(f, x.f) != 0) return false; - if (Double.compare(d, x.d) != 0) return false; - - return true; + return l == x.l && + b == x.b && + v == x.v && + s == x.s && + i == x.i && + Float.compare(f, x.f) == 0 && + Double.compare(d, x.d) == 0; } public int hashCode() { diff --git a/java/java-tests/testData/codeInsight/generateEquals/afterSuperEquals.java b/java/java-tests/testData/codeInsight/generateEquals/afterSuperEquals.java index 0cf488afa972..7418cfc15b92 100644 --- a/java/java-tests/testData/codeInsight/generateEquals/afterSuperEquals.java +++ b/java/java-tests/testData/codeInsight/generateEquals/afterSuperEquals.java @@ -11,7 +11,6 @@ class Test extends SuperTest { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; - return true; } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateEqualsTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateEqualsTest.java index 46c6ed61b138..8a417c2ba7b5 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateEqualsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateEqualsTest.java @@ -1,14 +1,18 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.java.codeInsight; +import com.intellij.application.options.CodeStyle; import com.intellij.codeInsight.generation.EqualsHashCodeTemplatesManager; import com.intellij.codeInsight.generation.GenerateEqualsHelper; import com.intellij.codeInsight.generation.GenerateMembersUtil; +import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiField; +import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.psi.codeStyle.JavaCodeStyleSettings; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.LightJavaCodeInsightTestCase; @@ -208,6 +212,8 @@ public class GenerateEqualsTest extends LightJavaCodeInsightTestCase { boolean useAccessors, boolean useInstanceofToCheckParameterType) { configureByFile("/codeInsight/generateEquals/before" + getTestName(false) + ".java"); + CodeStyleSettings codeStyleSettings = CodeStyle.getSettings(getProject()); + codeStyleSettings.getCommonSettings(JavaLanguage.INSTANCE).BINARY_OPERATION_WRAP = CommonCodeStyleSettings.WRAP_ON_EVERY_ITEM; JavaCodeStyleSettings.getInstance(getProject()).GENERATE_FINAL_LOCALS = true; JavaCodeStyleSettings.getInstance(getProject()).INSERT_OVERRIDE_ANNOTATION = insertOverride; PsiElement element = getFile().findElementAt(getEditor().getCaretModel().getOffset());