This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-collections.git


The following commit(s) were added to refs/heads/master by this push:
     new e31092fb9 Keep existing sort order in ComparatorChain.setComparator 
(#723)
e31092fb9 is described below

commit e31092fb972f0d37b810c8618c47d9833fd1b31f
Author: Naveed Khan <[email protected]>
AuthorDate: Wed Aug 12 14:41:33 2026 +0000

    Keep existing sort order in ComparatorChain.setComparator (#723)
    
    the two-arg overload passed reverse=false, resetting a reverse column to 
ascending; forward the current ordering bit instead.
---
 .../commons/collections4/comparators/ComparatorChain.java  |  2 +-
 .../collections4/comparators/ComparatorChainTest.java      | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git 
a/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
 
b/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
index 3c3a4151c..d06f01882 100644
--- 
a/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
+++ 
b/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
@@ -294,7 +294,7 @@ public class ComparatorChain<E> implements Comparator<E>, 
Serializable {
      *                   if index &lt; 0 or index &gt;= size()
      */
     public void setComparator(final int index, final Comparator<E> comparator) 
throws IndexOutOfBoundsException {
-        setComparator(index, comparator, false);
+        setComparator(index, comparator, orderingBits.get(index));
     }
 
     /**
diff --git 
a/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
 
b/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
index 8020b7c4c..751cee87c 100644
--- 
a/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
+++ 
b/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
@@ -187,4 +187,18 @@ class ComparatorChainTest extends 
AbstractComparatorTest<ComparatorChainTest.Pse
         assertEquals(chain.compare(i1, i2), correctValue, "Comparison returns 
the right order");
     }
 
+    @Test
+    void testSetComparatorKeepsExistingSortOrder() {
+        // a reverse column must stay reverse after the two-arg setComparator,
+        // which is documented to maintain the existing sort order
+        final ComparatorChain<Integer> reverse = new ComparatorChain<>(new 
ComparableComparator<Integer>(), true);
+        reverse.setComparator(0, new ComparableComparator<Integer>());
+        assertTrue(reverse.compare(1, 2) > 0, "reverse column must stay 
descending");
+
+        // a forward column must stay forward
+        final ComparatorChain<Integer> forward = new ComparatorChain<>(new 
ComparableComparator<Integer>(), false);
+        forward.setComparator(0, new ComparableComparator<Integer>());
+        assertTrue(forward.compare(1, 2) < 0, "forward column must stay 
ascending");
+    }
+
 }

Reply via email to