You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ba...@apache.org on 2013/10/25 10:19:29 UTC

svn commit: r1535653 - in /commons/proper/lang/trunk/src: changes/changes.xml main/java/org/apache/commons/lang3/builder/EqualsBuilder.java test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java

Author: bayard
Date: Fri Oct 25 08:19:29 2013
New Revision: 1535653

URL: http://svn.apache.org/r1535653
Log:
Applying Thomas Neidhart's patch for LANG-905; fixing a bug in which EqualsBuilder considers two arrays of the same type to be equal, without considering the contents

Modified:
    commons/proper/lang/trunk/src/changes/changes.xml
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
    commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java

Modified: commons/proper/lang/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/changes/changes.xml?rev=1535653&r1=1535652&r2=1535653&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/changes/changes.xml (original)
+++ commons/proper/lang/trunk/src/changes/changes.xml Fri Oct 25 08:19:29 2013
@@ -22,6 +22,7 @@
   <body>
 
   <release version="3.2" date="TBA" description="Next release">
+    <action issue="LANG-905" type="fix">EqualsBuilder returns true when comparing arrays, even when the elements are different</action>
     <action issue="LANG-774" type="add" due-to="Erhan Bagdemir">Added isStarted, isSuspended and isStopped to StopWatch</action>
     <action issue="LANG-917" type="fix" due-to="Arne Burmeister">Fixed exception when combining custom and choice format in ExtendedMessageFormat</action>
     <action issue="LANG-848" type="add" due-to="Alexander Muthmann">Added StringUtils.isBlank/isEmpty CharSequence... methods</action>

Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java?rev=1535653&r1=1535652&r2=1535653&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java (original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java Fri Oct 25 08:19:29 2013
@@ -24,6 +24,7 @@ import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.tuple.Pair;
 
 /**
@@ -354,10 +355,14 @@ public class EqualsBuilder implements Bu
         }
         final EqualsBuilder equalsBuilder = new EqualsBuilder();
         try {
-            reflectionAppend(lhs, rhs, testClass, equalsBuilder, testTransients, excludeFields);
-            while (testClass.getSuperclass() != null && testClass != reflectUpToClass) {
-                testClass = testClass.getSuperclass();
+            if (testClass.isArray()) {
+                equalsBuilder.append(lhs, rhs);
+            } else {
                 reflectionAppend(lhs, rhs, testClass, equalsBuilder, testTransients, excludeFields);
+                while (testClass.getSuperclass() != null && testClass != reflectUpToClass) {
+                    testClass = testClass.getSuperclass();
+                    reflectionAppend(lhs, rhs, testClass, equalsBuilder, testTransients, excludeFields);
+                }
             }
         } catch (final IllegalArgumentException e) {
             // In this case, we tried to test a subclass vs. a superclass and

Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java?rev=1535653&r1=1535652&r2=1535653&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java (original)
+++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java Fri Oct 25 08:19:29 2013
@@ -1126,5 +1126,29 @@ public class EqualsBuilderTest {
             return EqualsBuilder.reflectionEquals(this, obj);
         }
     }
+    
+    @Test
+    public void testReflectionArrays() throws Exception {
+
+        final TestObject one = new TestObject(1);
+        final TestObject two = new TestObject(2);
+
+        Object[] o1 = new Object[] { one };
+        Object[] o2 = new Object[] { two };
+        Object[] o3 = new Object[] { one };
+
+        assertTrue(!EqualsBuilder.reflectionEquals(o1, o2));
+        assertTrue(EqualsBuilder.reflectionEquals(o1, o1));
+        assertTrue(EqualsBuilder.reflectionEquals(o1, o3));
+        
+        double[] d1 = { 0, 1 };
+        double[] d2 = { 2, 3 };
+        double[] d3 = { 0, 1 };
+        
+        assertTrue(!EqualsBuilder.reflectionEquals(d1, d2));
+        assertTrue(EqualsBuilder.reflectionEquals(d1, d1));
+        assertTrue(EqualsBuilder.reflectionEquals(d1, d3));
+    }
+
 }