generate equals/hashCode: sort primitive fields up and leave natural ordering (IDEA-21339)

This commit is contained in:
Anna Kozlova
2015-01-13 15:00:07 +01:00
parent 22ceca17df
commit cd2d451fba
13 changed files with 47 additions and 49 deletions

View File

@@ -24,6 +24,7 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.MethodSignature;
import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashMap;
@@ -237,10 +238,7 @@ public class GenerateEqualsHelper implements Runnable {
public int compare(PsiField f1, PsiField f2) {
if (f1.getType() instanceof PsiPrimitiveType && !(f2.getType() instanceof PsiPrimitiveType)) return -1;
if (!(f1.getType() instanceof PsiPrimitiveType) && f2.getType() instanceof PsiPrimitiveType) return 1;
final String name1 = f1.getName();
final String name2 = f2.getName();
assert name1 != null && name2 != null;
return name1.compareTo(name2);
return PsiUtilCore.compareElementsByPosition(f1, f2);
}
}

View File

@@ -11,10 +11,10 @@ class Test {
final Test test = (Test) o;
// Compare nested arrays - values of myIIs here
if (!Arrays.equals(myIs, test.myIs)) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(myOs, test.myOs)) return false;
// Compare nested arrays - values of myIIs here
if (!Arrays.equals(myIs, test.myIs)) return false;
return true;
}

View File

@@ -11,10 +11,10 @@ class Test {
final Test test = (Test) o;
if (!Arrays.deepEquals(myIIs, test.myIIs)) return false;
if (!Arrays.equals(myIs, test.myIs)) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
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;
}

View File

@@ -26,22 +26,22 @@ class A {
final A a = (A) o;
if (a10 != a.a10) return false;
if (Float.compare(a.a11, a11) != 0) return false;
if (Double.compare(a.a12, a12) != 0) return false;
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(a.a11, a11) != 0) return false;
if (Double.compare(a.a12, a12) != 0) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(a1, a.a1)) 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;
if (!Arrays.deepEquals(a2, a.a2)) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
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;
}

View File

@@ -26,22 +26,22 @@ class A {
final A a = (A) o;
if (a10 != a.a10) return false;
if (Float.compare(a.a11, a11) != 0) return false;
if (Double.compare(a.a12, a12) != 0) return false;
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(a.a11, a11) != 0) return false;
if (Double.compare(a.a12, a12) != 0) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(a1, a.a1)) return false;
if (!a13.equals(a.a13)) return false;
if (!a14.equals(a.a14)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
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;
}

View File

@@ -74,22 +74,22 @@ class A {
final A a = (A) o;
if (getA10() != a.getA10()) return false;
if (Float.compare(a.getA11(), getA11()) != 0) return false;
if (Double.compare(a.getA12(), getA12()) != 0) return false;
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(a.getA11(), getA11()) != 0) return false;
if (Double.compare(a.getA12(), getA12()) != 0) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(getA1(), a.getA1())) 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;
if (!Arrays.deepEquals(getA2(), a.getA2())) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
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;
}

View File

@@ -25,21 +25,21 @@ class A {
final A a = (A) o;
if (a10 != a.a10) return false;
if (Float.compare(a.a11, a11) != 0) return false;
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(a.a11, a11) != 0) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(a1, a.a1)) return false;
if (!a13.equals(a.a13)) return false;
if (!a14.equals(a.a14)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
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;
}

View File

@@ -38,22 +38,22 @@ class A extends B {
final A a = (A) o;
if (a10 != a.a10) return false;
if (Float.compare(a.a11, a11) != 0) return false;
if (Double.compare(a.a12, a12) != 0) return false;
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(a.a11, a11) != 0) return false;
if (Double.compare(a.a12, a12) != 0) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(a1, a.a1)) return false;
if (!a13.equals(a.a13)) return false;
if (!a14.equals(a.a14)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
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;
}

View File

@@ -38,20 +38,20 @@ class A extends B {
return new org.apache.commons.lang3.builder.EqualsBuilder()
.appendSuper(super.equals(o))
.append(a10, a.a10)
.append(a11, a.a11)
.append(a12, a.a12)
.append(a7, a.a7)
.append(a8, a.a8)
.append(a9, a.a9)
.append(a10, a.a10)
.append(a11, a.a11)
.append(a12, a.a12)
.append(a1, a.a1)
.append(a13, a.a13)
.append(a14, a.a14)
.append(a2, a.a2)
.append(a3, a.a3)
.append(a4, a.a4)
.append(a5, a.a5)
.append(a6, a.a6)
.append(a13, a.a13)
.append(a14, a.a14)
.isEquals();
}

View File

@@ -36,20 +36,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 com.google.common.base.Objects.equal(a10, a.a10) &&
com.google.common.base.Objects.equal(a11, a.a11) &&
com.google.common.base.Objects.equal(a12, a.a12) &&
com.google.common.base.Objects.equal(a7, a.a7) &&
return com.google.common.base.Objects.equal(a7, a.a7) &&
com.google.common.base.Objects.equal(a8, a.a8) &&
com.google.common.base.Objects.equal(a9, a.a9) &&
com.google.common.base.Objects.equal(a10, a.a10) &&
com.google.common.base.Objects.equal(a11, a.a11) &&
com.google.common.base.Objects.equal(a12, a.a12) &&
Arrays.equals(a1, a.a1) &&
com.google.common.base.Objects.equal(a13, a.a13) &&
com.google.common.base.Objects.equal(a14, a.a14) &&
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);
Arrays.deepEquals(a6, a.a6) &&
com.google.common.base.Objects.equal(a13, a.a13) &&
com.google.common.base.Objects.equal(a14, a.a14);
}
@Override

View File

@@ -10,8 +10,8 @@ class Test {
final Test test = (Test) o;
if (Double.compare(test.c, c) != 0) return false;
if (i != test.i) return false;
if (Double.compare(test.c, c) != 0) return false;
if (!a.equals(test.a)) return false;
if (b != null ? !b.equals(test.b) : test.b != null) return false;

View File

@@ -26,15 +26,14 @@ class A {
final A a = (A) o;
if (a10 != a.a10) return false;
if (Float.compare(a.a11, a11) != 0) return false;
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(a.a11, a11) != 0) return false;
if (Double.compare(a.temp, temp) != 0) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(a1, a.a1)) return false;
if (!a14.equals(a.a14)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(a3, a.a3)) return false;
@@ -42,6 +41,7 @@ class A {
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;
}

View File

@@ -10,8 +10,8 @@ public class Test {
final Test test = (Test) o;
if (f != test.f) return false;
if (h != test.h) return false;
if (j != test.j) return false;
if (h != test.h) return false;
return true;
}