[ 
https://issues.apache.org/jira/browse/COLLECTIONS-331?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jochen Wiedmann resolved COLLECTIONS-331.
-----------------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: 4.0-beta-1)
                   3.2.2
         Assignee: Jochen Wiedmann

Agree with Hen's assessment that the use of Comparable.compareTo might likely 
cause a bunch of other problems.

I have verified, that this bug exists in every revision since CollatingIterator 
was verified. In other words, we don't need to care for upwards compatibility, 
there can't be any code floating around that depends on the use of "natural 
sort order".

Consequently I decided to

* throw an NPE in least() with a message describing the problem, if no 
Comparator is present. (This meets the current behaviour, so it is upwards 
compatible.)
* change the documentation of the default constructor to require a call to 
setComparator
* remove all references to "natural sort order" and replace them with the 
recommendation to use ComparableComparator, if required

> CollatingIterator NPE when Comparator is null
> ---------------------------------------------
>
>                 Key: COLLECTIONS-331
>                 URL: https://issues.apache.org/jira/browse/COLLECTIONS-331
>             Project: Commons Collections
>          Issue Type: Bug
>          Components: Iterator
>    Affects Versions: 3.2
>            Reporter: Michael Krkoska
>            Assignee: Jochen Wiedmann
>            Priority: Minor
>             Fix For: 3.2.2
>
>         Attachments: COLLECTIONS-331.patch, CollatingIteratorTest.java
>
>   Original Estimate: 5m
>  Remaining Estimate: 5m
>
> Run the attached Test against commons-collections-3.2.1. While the JavaDoc 
> for CollatingIterator claims 
> {{@param comp  the comparator to use to sort, or null to use natural sort 
> order}}
> the test fails, because the comparator is null.
> Fixing this requires a change in 
> {{org.apache.commons.collections.iterators.CollatingIterator.least()}}: 
> {code}
> if (comparator.compare(curObject,leastObject) < 0) { ...
> {code}
> could be replaced with
> {code}
> int c = 
> comparator==null?((Comparable)curObject).compareTo(leastObject):comparator.compare(curObject,leastObject);
> if (c < 0) { ...
> {code}
> The workaround is to provide a comparator, of course.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to