This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git
The following commit(s) were added to refs/heads/master by this push:
new bc8a3b9 sort fields in HashCodeBuilder for deterministic order (#480)
bc8a3b9 is described below
commit bc8a3b9d8428bfcdfbce67e9010cf0aa27e6c8a6
Author: contextshuffling <[email protected]>
AuthorDate: Fri Nov 22 11:15:10 2019 -0600
sort fields in HashCodeBuilder for deterministic order (#480)
---
.../java/org/apache/commons/lang3/builder/HashCodeBuilder.java | 3 +++
.../org/apache/commons/lang3/builder/HashCodeBuilderTest.java | 8 ++++----
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git
a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
index 1c2d722..a1569da 100644
--- a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
@@ -20,7 +20,9 @@ package org.apache.commons.lang3.builder;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
@@ -189,6 +191,7 @@ public class HashCodeBuilder implements Builder<Integer> {
try {
register(object);
final Field[] fields = clazz.getDeclaredFields();
+ Arrays.sort(fields, Comparator.comparing(Field::getName));
AccessibleObject.setAccessible(fields, true);
for (final Field field : fields) {
if (!ArrayUtils.contains(excludeFields, field.getName())
diff --git
a/src/test/java/org/apache/commons/lang3/builder/HashCodeBuilderTest.java
b/src/test/java/org/apache/commons/lang3/builder/HashCodeBuilderTest.java
index 148c533..598f899 100644
--- a/src/test/java/org/apache/commons/lang3/builder/HashCodeBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/builder/HashCodeBuilderTest.java
@@ -490,11 +490,11 @@ public class HashCodeBuilderTest {
public void testReflectionHashCodeExcludeFields() {
final TestObjectWithMultipleFields x = new
TestObjectWithMultipleFields(1, 2, 3);
- assertEquals(((17 * 37 + 1) * 37 + 2) * 37 + 3,
HashCodeBuilder.reflectionHashCode(x));
+ assertEquals(((17 * 37 + 1) * 37 + 3) * 37 + 2,
HashCodeBuilder.reflectionHashCode(x));
- assertEquals(((17 * 37 + 1) * 37 + 2) * 37 + 3,
HashCodeBuilder.reflectionHashCode(x, (String[]) null));
- assertEquals(((17 * 37 + 1) * 37 + 2) * 37 + 3,
HashCodeBuilder.reflectionHashCode(x));
- assertEquals(((17 * 37 + 1) * 37 + 2) * 37 + 3,
HashCodeBuilder.reflectionHashCode(x, "xxx"));
+ assertEquals(((17 * 37 + 1) * 37 + 3) * 37 + 2,
HashCodeBuilder.reflectionHashCode(x, (String[]) null));
+ assertEquals(((17 * 37 + 1) * 37 + 3) * 37 + 2,
HashCodeBuilder.reflectionHashCode(x));
+ assertEquals(((17 * 37 + 1) * 37 + 3) * 37 + 2,
HashCodeBuilder.reflectionHashCode(x, "xxx"));
assertEquals((17 * 37 + 1) * 37 + 3,
HashCodeBuilder.reflectionHashCode(x, "two"));
assertEquals((17 * 37 + 1) * 37 + 2,
HashCodeBuilder.reflectionHashCode(x, "three"));