Author: tn
Date: Sat Nov 21 23:47:52 2015
New Revision: 1715592

URL: http://svn.apache.org/viewvc?rev=1715592&view=rev
Log:
Update release notes for 4.1.

Modified:
    commons/proper/collections/trunk/RELEASE-NOTES.txt

Modified: commons/proper/collections/trunk/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewvc/commons/proper/collections/trunk/RELEASE-NOTES.txt?rev=1715592&r1=1715591&r2=1715592&view=diff
==============================================================================
--- commons/proper/collections/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/collections/trunk/RELEASE-NOTES.txt Sat Nov 21 23:47:52 2015
@@ -1,364 +1,163 @@
 
               Apache Commons Collections
-                     Version 4.0
+                     Version 4.1
                     RELEASE NOTES
 
 INTRODUCTION:
 
-Commons collections is a project to develop and maintain collection classes
-based on and inspired by the JDK collection framework.
-This version uses the generics features of Java 5 and is not compatible with
-earlier JDK versions.
-
-The process of generifying an API is complex.
-For commons-collections, we have chosen to break the API in various ways.
-The aim behind this is to provide an API design that better suits generics.
-We have also removed all deprecated classes and fixed oddities in the previous
-API that we couldn't fix due to backwards compatibility restrictions.
-
-As such, this release can not be considered to be a simple, drop-in, 
replacement
-for commons-collections. To help with the migration to this new version, the
-package has changed to "org.apache.commons.collections4", thus it is possible
-to have both commons-collections versions in the classpath.
-
-These release notes will try to guide you in the process of upgrading, however 
you
-should remember that this is a new API based on the original, so some concepts
-have changed.
+Apache Commons Collections is a project to develop and maintain collection
+classes based on and inspired by the JDK collection framework.
+
+This v4.1 release is a minor and security release, fixing several bugs present 
in
+previous releases of the 4.X branch. Additionally, this release provides a 
mitigation
+for a known remote code exploitation via the standard java object serialization
+mechanism. Serialization support for unsafe classes in the functor package has 
been
+completely removed (classes do not implement the Serializable interface 
anymore).
+For more details, please refer to COLLECTIONS-580.
+
+All users are strongly encouraged to updated to this release.
+
 
 Compatibility
 -------------
 
- o Java 5 or later is required.
- o This release is not source or binary compatible with previous releases of
-   Commons Collections. This includes releases from the 3.x branch as well as
-   preceding alpha releases for 4.0 (see details of changes below).
+ o Java 6 or later is now required (previous version 4.0 required Java 5).
+ o This release is source and binary compatible with the previous 4.0 release
+   of Commons Collections with the exception that some classes in the functor
+   package do not implement the Serializable interface anymore (see 
COLLECTIONS-580). 
  o some unit tests are disabled when executed with an IBM JDK 6 due to a faulty
    java.util.TreeMap implementation.
 
+Major changes since 4.0
+-----------------------
 
-Major changes since 3.2.1
--------------------------
-
- o Use of generics and other language features introduced in Java 5 (varargs, 
Iterable)
- o Removed deprecated classes / methods and features which are now supported 
by the JDK
- o Replaced Buffer interface with java.util.Queue
- o Added concept of split maps with respective interfaces Put / Get (see also 
package splitmap)
- o Added new Trie interface together with an implementation of a Patricia Trie
-
-
-Changes since 4.0-alpha1
-------------------------
-
- o [COLLECTIONS-502] Resolved generic parameter inconsistency for various 
static fields, e.g. BagUtils.EMPTY_BAG,
-                     TruePredicate.INSTANCE and many others. All accessible 
static fields use raw types so that
-                     they can be used directly without explicit casting. To 
avoid compiler warnings about unchecked
-                     conversion and/or rawtypes use the corresponding factory 
methods, e.g. BagUtils.emptyBag(). 
- o [COLLECTIONS-501] Renamed methods "V MultiKeyMap#remove(Object, Object, 
...)" to
-                     "V MultiKeyMap#removeMultiKey(Object, Object, ...)" to 
avoid future conflicts
-                     with a default method of the Map interface in Java 8.
- o [COLLECTIONS-500] Renamed "V MultiMap#remove(K, V)" to "boolean 
MultiMap#removeMapping(K, V)"
-                     to avoid future conflicts with a default method of the 
Map interface in Java 8.
- o [COLLECTIONS-499] Refactored the test framework for Bag implementations to 
extend from
-                     "AbstractCollectionTest" by decorating the concrete Bag 
instance with
-                     a CollectionBag or CollectionSortedBag. 
- o [COLLECTIONS-498] "CollectionBag" will now also respect the contract of the 
decorated bag in case
-                     a null argument is provided to either removeAll or 
retainAll.
- o [COLLECTIONS-497] Added bag decorator "CollectionSortedBag" which decorates 
a SortedBag to make it
-                     comply with the Collection contract.
- o [COLLECTIONS-496] "UnmodifiableBoundedCollection" does now also implement 
the marker interface "Unmodifiable"
-                     similar as all other unmodifiable decorators.
- o [COLLECTIONS-495] "UnmodifiableTrie#unmodifiableTrie(Trie)" will not 
decorate again an already unmodifiable Trie.
-                     Also the return type has been changed to "Trie" to be 
consistent with other Unmodifiable decorators.
- o [COLLECTIONS-494] Moved "Equator" interface to base package for 
consistency. Thanks to Emmanuel Bourg.
- o [COLLECTIONS-488] Added "CollectionsUtils#matchesAll(Iterable, Predicate)" 
to test if all elements
-                     of a collection match a given predicate. Thanks to Josh 
Cain.
- o [COLLECTIONS-485] Accept wildcard input where possible, e.g. in 
copy-constructors, Unmodifiable* decorators
-                     and iterators. Thanks to Hollis Waite.
- o [COLLECTIONS-481] No collision detection/resolution was performed when 
calling "CompositeSet#addComposited(...)"
-                     with more than one Set as argument. Additionally use 
varargs parameters instead of arrays
-                     in CompositeSet and CompositeCollection constructor and 
addComposited method. Thanks to Hollis Waite.
- o [COLLECTIONS-480] Narrow return type of "BidiMap#values()" to Set as the 
values are required to be unique. Thanks to Hollis Waite.
- o [COLLECTIONS-468] Renamed CompliantBag to CollectionBag.
- o [COLLECTIONS-475] Fixed conversion of timeout parameters in 
"PassiveExpiringMap".
-
-
-Removed classes
----------------
-
- o [COLLECTIONS-458] Removed unused class 
"AbstractUntypedCollectionDecorator<E, D>"
- o [COLLECTIONS-432] Removed "Buffer" interface and all its implementations 
and related classes.
-                     Replaced by "java.util.Queue", see also section [New 
classes]
-                     
-   - PriorityBuffer: use either java.util.PriorityQueue or 
java.util.concurrent.PriorityBlockingQueue
-   - SynchronizedBuffer: use the corresponding *BlockingQueue classes in 
java.util.concurrent
-   - BoundedBuffer: use either ArrayBlockingBuffer(capacity) or 
LinkedBlockingBuffer(capacity) in java.util.concurrent
-   - UnboundedFifoBuffer: use either java.util.LinkedList or 
java.util.concurrent.LinkedBlockingBuffer
-                     
- o [COLLECTIONS-351] Removed features now supported by the JDK or other Apache 
Commons libraries
- 
-   - FastArrayList: use java.util.concurrent.CopyOnWriteArrayList
-   - FastHashMap: use java.util.concurrent.ConcurrentHashMap, but beware of 
null keys and values
-   - FastTreeSet: no direct replacement, use ConcurrentHashMap or a 
synchronized TreeMap
-   - IdentityMap: use java.util.IdentityHashMap
-   - ExtendedProperties: use commons-configuration
-   - Synchronized[List,Set,SortedSet]: use 
java.util.Collections.synchronized*()
-   - Typed* decorators: use generics for type safety, or 
java.util.Collections.checked*()
-   - [List,Set,Map]Utils.EMPTY_*: use the corresponding fields in 
java.util.Collections
- 
- o [COLLECTIONS-229] Removed deprecated collection classes and methods
-
-
-New classes
------------
-
- o [COLLECTIONS-497] CollectionSortedBag - decorates a SortedBag to make it 
comply with the Collection contract.
- o [COLLECTIONS-468] CollectionBag - decorates another Bag to make it comply 
with the Collection contract.
- o [COLLECTIONS-463] PushbackIterator - supports pushback of elements during 
iteration. Thanks to Andy Seaborne, Claude Warren.
- o [COLLECTIONS-462] PeekingIterator - supports one-element lookahead during 
iteration. Thanks to Andy Seaborne, Claude Warren.
- o [COLLECTIONS-432] CircularFifoQueue - analogous class to CircularFifoBuffer 
for the Queue interface
-                     PredicatedQueue - analogous class to PredicatedBuffer
-                     TransformedQueue - analogous class to TransformedBuffer
-                     UnmodifiableQueue - analogous class to UnmodifiableBuffer
-                     QueueUtils - analogous class to BufferUtils
- o [COLLECTIONS-422] PermutationIterator - generates unordered permutations of 
a collection. Thanks to Benoit Corne. 
- o [COLLECTIONS-404] SequencesComparator - an implementation of Eugene Myers 
difference algorithm in package o.a.c.c.sequence. Thanks to Jordane Sarda.
- o [COLLECTIONS-396] LazyIteratorChain - a variant of IteratorChain which 
supports lazy initialization. Thanks to Jeff Rodriguez.
- o [COLLECTIONS-322] NodeListIterator - supports iteration over a 
org.w3c.dom.NodeList. Thanks to Thomas Vahrst. 
- o [COLLECTIONS-313] CatchAndRethrowClosure - re-throws any checked exception 
as unchecked "FunctorException". Thanks to David J. M. Karlsen. 
- o [COLLECTIONS-275] IndexedCollection - collection decorator which provides a 
map-like view on an existing collection. Thanks to Stephen Kestle. 
- o [COLLECTIONS-258] DualLinkedHashBidiMap - bidi map implementation using 
LinkedHashMap instances. Thanks to Nathan Blomquist. 
- o [COLLECTIONS-242] Equator - interface for testing object equality. 
- o [COLLECTIONS-241] PassiveExpiringMap - map decorator which passively 
expires entries. Thanks to Elifarley Callado Coelho.
- o [COLLECTIONS-225] PatriciaTrie - PATRICIA trie implementation for the new 
Trie interface, together with Unmodifiable and
-                     Synchronized decorators. Thanks to Sam Berlin and Roger 
Kapsi.
- o [COLLECTIONS-8  ] ComparatorPredicate - predicate to compare objects 
against a fixed instance. Thanks to Rune Peter Bjørnstad.
- o [None           ] Put / Get - interfaces for split maps
- o [None           ] SplitMapUtils / splitmap.TransformedSplitMap - utilities 
and implementation for split maps
-
-
-New methods in *Utils
----------------------
-
- o [COLLECTIONS-488] Added "CollectionsUtils#matchesAll(Iterable, Predicate)" 
to test if all elements
-                     of a collection match a given predicate. Thanks to Josh 
Cain.
- o [COLLECTIONS-456] ListUtils#longestCommonSubsequence(...) to get the 
longest common subsequence of arbitrary lists or CharSequences.
- o [COLLECTIONS-450] CollectionUtils#forAllButLastDo(Collection, Closure) and 
forAllButLastDo(Iterator, Closure). Thanks to J. Moldawski.
- o [COLLECTIONS-446] CollectionUtils#isEqualCollection(Collection, Collection, 
Equator). Thanks to Matt Lachman.
- o [COLLECTIONS-436] *Utils#emptyIfNull(*) methods in classes CollectionUtils, 
ListUtils, SetUtils and MapUtils. Thanks to Arman Sharif.
- o [COLLECTIONS-429] CollectionUtils#containsAll(Collection, Collection) with 
guaranteed runtime complexity of O(n + m)
-   +COLLECTIONS-434] and space complexity of O(n). This method may yield much 
better performance than Collection.containsAll(Collection)
-                     depending on the use-case and type of collection used. 
Thanks to Adrian Nistor, Mert Guldur.
- o [COLLECTIONS-422] CollectionUtils#permutations(Collection) to generate all 
permutations of a collection. Thanks to Benoit Corne. 
- o [COLLECTIONS-405] ListUtils#select() and ListUtils#selectRejected() 
methods. Thanks to Adam Dyga. 
- o [COLLECTIONS-393] ListUtils#partition() to split a List into consecutive 
sublists. Thanks to Chris Shayan. 
- o [COLLECTIONS-383] CollectionUtils#forAllDo(Iterator, Closure). Thanks to 
Adrian Cumiskey.  
- o [COLLECTIONS-375] ListUtils#defaultIfNull(List, List). Thanks to Ivan 
Hristov. 
- o [COLLECTIONS-361] CollectionUtils#filterInverse(Iterable, Predicate). 
Thanks to Jean-Noel Rouvignac.  
- o [COLLECTIONS-306] CollectionUtils#subtract(Iterable, Iterable, Predicate). 
Thanks to Chris Shayan.  
- o [COLLECTIONS-296] CollectionUtils#collate(...) to merge two sorted 
Collections using the standard O(n) merge algorithm. Thanks to Julius Davies.  
- o [COLLECTIONS-286] CollectionUtils#extractSingleton(Collection). Thanks to 
Geoffrey De Smet.  
- o [COLLECTIONS-263] MapUtils#populateMap(MultiMap, ...) to support also 
"MultiMap" instances as input. Thanks to John Hunsley.  
- o [COLLECTIONS-235] ListUtils#indexOf(List, Predicate). Thanks to Nathan 
Egge. 
- o [COLLECTIONS-194] MapUtils#populateMap(Map, Iterable, Transformer, ...). 
Thanks to Dave Meikle. 
+ o Added interface MultiSet (package multiset)
+ o Added interface MultiValuedMap, ListValuedMap and SetValuedMap (package 
multimap) 
+ o Added fluent API for Iterable instances (class FluentIterable)
+
+
+Changes
+-------
+
+o [COLLECTIONS-580]: Serialization support for unsafe classes in the functor 
package
+                     has been removed as this can be exploited for remote code 
execution
+                     attacks. Classes considered to be unsafe are: 
CloneTransformer,
+                     ForClosure, InstantiateFactory, InstantiateTransformer, 
InvokerTransformer,
+                     PrototypeCloneFactory, PrototypeSerializationFactory, 
WhileClosure. 
+o [COLLECTIONS-551]: Deprecated various method in "CollectionUtils" in favor 
of similar
+                     methods in the newly introduced "IterableUtils". 
+o [COLLECTIONS-570]: All constructors and static factory methods will now 
throw a "NullPointerException"
+                     if a required input argument is null. Previously 
sometimes a "IllegalArgumentException"
+                     was used. 
+o [COLLECTIONS-571]: Deprecated methods "synchronizedCollection(Collection)" 
and
+                     "unmodifiableCollection(Collection)" in class 
"CollectionUtils", the corresponding
+                     methods in "java.util.Collections" should be used 
instead. 
+o [COLLECTIONS-562]: Upgraded minimum java requirement to Java 6 (up from Java 
5). 
 
 
 New features
 ------------
 
- o [COLLECTIONS-399] Added new method "get(int)" to "CircularFifoQueue". 
Thanks to Sebb.
- o [COLLECTIONS-327] Added serialVersionUID fields for "CompositeCollection", 
"CompositeSet", "EmptyMapMutator", "EmptySetMutator". Thanks to sebb. 
- o [COLLECTIONS-293] Added support for using custom "Equator" objects in 
"EqualPredicate". Thanks to Stephen Kestle. 
- o [COLLECTIONS-289] Added method "CollatingIterator#getIteratorIndex()". 
Thanks to Fredrik Kjellberg.
- o [COLLECTIONS-285] Added serialization support for "TreeBidiMap". Thanks to 
Christian Gruenberg. 
- o [COLLECTIONS-272] Added serialization support for "FixedOrderComparator" 
and "TransformingComparator". Thanks to Chaitanya Mutyala. 
- o [COLLECTIONS-260] Added constructor "TransformingComparator(Transformer)". 
Thanks to Stephen Kestle. 
- o [COLLECTIONS-237] Added method "MultiValueMap#iterator()" to return a 
flattened version of "entrySet().iterator()".
-                     Clarified javadoc for "entrySet()" that the returned 
Entry objects are unflattened, i.e. the Entry object
-                     for a given key contains all values mapped to this key. 
Thanks to Nils Kaiser, Alan Mehlo. 
- o [COLLECTIONS-226] Added method "ListOrderedMap#putAll(int, Map)". Thanks to 
Vasily Ivanov. 
- o [COLLECTIONS-213] Added support for resettable iterators in 
"IteratorIterable". Thanks to Dusan Chromy. 
-
-
-Changed classes / methods
--------------------------
-
- o [COLLECTIONS-502] Resolved generic parameter inconsistency for various 
static fields, e.g. BagUtils.EMPTY_BAG,
-                     TruePredicate.INSTANCE and many others. All accessible 
static fields use raw types so that
-                     they can be used directly without explicit casting. To 
avoid compiler warnings about unchecked
-                     conversion and/or rawtypes use the corresponding factory 
methods, e.g. BagUtils.emptyBag(). 
- o [COLLECTIONS-501] Renamed methods "V MultiKeyMap#remove(Object, Object, 
...)" to
-                     "V MultiKeyMap#removeMultiKey(Object, Object, ...)" to 
avoid future conflicts
-                     with a default method of the Map interface in Java 8.
- o [COLLECTIONS-500] Renamed "V MultiMap#remove(K, V)" to "boolean 
MultiMap#removeMapping(K, V)"
-                     to avoid future conflicts with a default method of the 
Map interface in Java 8.
- o [COLLECTIONS-499] Refactored the test framework for Bag implementations to 
extend from
-                     "AbstractCollectionTest" by decorating the concrete Bag 
instance with
-                     a CollectionBag or CollectionSortedBag. 
- o [COLLECTIONS-496] "UnmodifiableBoundedCollection" does now also implement 
the marker interface "Unmodifiable"
-                     similar as all other unmodifiable decorators.
- o [COLLECTIONS-495] "UnmodifiableTrie#unmodifiableTrie(Trie)" will not 
decorate again an already unmodifiable Trie.
-                     Also the return type has been changed to "Trie" to be 
consistent with other Unmodifiable decorators.
- o [COLLECTIONS-494] Moved "Equator" interface to base package for 
consistency. Thanks to Emmanuel Bourg.
- o [COLLECTIONS-485] Accept wildcard input where possible, e.g. in 
copy-constructors, Unmodifiable* decorators
-                     and iterators. Thanks to Hollis Waite.
- o [COLLECTIONS-480] Narrow return type of "BidiMap#values()" to Set as the 
values are required to be unique. Thanks to Hollis Waite.
- o [COLLECTIONS-473] Made field "collection" in class 
"AbstractCollectionDecorator" private and added
-                     setter "setCollection(Collection)" with scope protected 
to set the decorated collection
-                     during de-serialization.
- o [COLLECTIONS-466] Replaced "Collection" with "Iterable" for method 
arguments where applicable.
- o [COLLECTIONS-460] Changed "IteratorChain" to use internally a "Queue" 
instead of a "List". Iterators are
-                     removed from the queue once used and can be garbage 
collected after being exhausted.
-                     Additionally removed the methods "setIterator(Iterator)" 
and "getIterators()".
- o [COLLECTIONS-459] Removed method "setArray(Object)" in class ArrayIterator 
and method "setArray(Object[])"
-                     in class ObjectArrayIterator and made fields array, 
startIndex and endIndex final and package private.
- o [COLLECTIONS-455] Changed scope of various fields to private / package 
private where appropriate.
- o [COLLECTIONS-454] An iterator over a "Flat3Map#entrySet()" will now return 
independent Map.Entry objects that will
-                     not change anymore when the iterator progresses.
- o [COLLECTIONS-453] Several closure and transformer implementations in the 
functor package will now copy
-                     an array as input parameter to their constructor (e.g. 
ChainedClosure).
- o [COLLECTIONS-452] Change base package to "org.apache.commons.collections4".
- o [COLLECTIONS-451] The constructors for all *Utils classes are now private 
to prevent instantiation. 
- o [COLLECTIONS-424] "CompositeSet" does not inherit from 
"CompositeCollection" anymore. The inner class "SetMutator"
-                     has been updated accordingly. Thanks to Michael Pradel.
- o [COLLECTIONS-382] Change maven coordinates to 
"org.apache.commons.commons-collections4". Thanks to Olivier Lamy. 
- o [COLLECTIONS-381] Move the project structure to a standard maven layout. 
Thanks to Olivier Lamy. 
- o [COLLECTIONS-372] TransformingComparator now supports different types for 
its input/output values. 
- o [COLLECTIONS-362] "CollectionUtils#filter(Iterable, Predicate)" will now 
return whether the collection has been modified.
-                     Thanks to Jean-Noel Rouvignac. 
- o [COLLECTIONS-341] "NOPClosure" is now a final class. Thanks to Goran Hacek. 
- o [COLLECTIONS-324] Fields transformer and decorated in class 
"TransformingComparator" are now final. Thanks to sebb. 
- o [COLLECTIONS-307] "SetUniqueList#subList()" will now return an unmodifiable 
list as changes to it may invalidate the parent list.
-                     Thanks to Christian Semrau, Thomas Vahrst. 
- o [COLLECTIONS-298] Calling "CollectionUtils#sizeIsEmpty(null)" will now 
return true. Thanks to Benjamin Bentmann. 
- o [COLLECTIONS-280] The predicate that rejected an object to be added to a 
"PredicatedCollection" is now contained in the
-                     respective exception message. Thanks to Chris Lewis. 
- o [COLLECTIONS-265] "TreeBag" will now only accept "Comparable" objects as 
input when used with natural ordering. Thanks to David Saff. 
- o [COLLECTIONS-251] The static factory methods have been renamed from 
"getInstance()" to a camel-case version of the class name,
-   +COLLECTIONS-321] e.g. "truePredicate()" for class "TruePredicate". Thanks 
to Stephen Kestle.
- o [COLLECTIONS-240] "MultiValueMap" is now serializable. Thanks to Wouter de 
Vaal. 
- o [COLLECTIONS-231] Return concrete class in static factory methods instead 
of base class interface
-                     (except for Unmodifiable decorators). Thanks to Torsten 
Curdt. 
- o [COLLECTIONS-230] "CollectionUtils#size(Collection)" now returns 0 when 
called with null as input. Thanks to Stepan Koltsov,sebb.
-   +COLLECTIONS-297]
-   +COLLECTIONS-318]
- o [COLLECTIONS-223] "CollectionUtils#addAll(...)" methods now return if the 
collection has been changed by this operation.
-                     Thanks to Vasily Ivanov. 
- o [COLLECTIONS-221] "CompositeCollection", "CompositeMap" and "CompositeSet" 
are now serializable. Thanks to Pal Denes. 
- o [COLLECTIONS-218] The "CollectionUtils#select(Collection, Predicate, 
Collection)" method will now return the output collection. 
- o [COLLECTIONS-182] "CollectionUtils#forAllDo(Collection, Closure)" now 
returns the provided closure. Thanks to Jim Cakalic. 
- o [COLLECTIONS-110] Make generic versions of all classes in collections.
-   +COLLECTIONS-243]
-   +COLLECTIONS-245]
-   +COLLECTIONS-247]
-   +COLLECTIONS-253]
-   +COLLECTIONS-273]
-   +COLLECTIONS-282]     
- o [None           ] Switch Abstract*Decorator classes to expose decorated() 
protected method instead of the decorated collection directly.
-                     Each class overrides decorated() to add its type 
covariantly, thus getList()/getSet() etc. methods are removed
- o [None           ] ArrayStack is now deprecated and will be removed in the 
next major release. It is replaced by the java.util.Deque
-                     interface available from Java 6.
+o [COLLECTIONS-508]: Added new interfaces "MultiValuedMap", "ListValuedMap" 
and "SetValuedMap"
+                     as a replacement for "MultiMap". Decorators and 
implementations reside in
+                     the "multimap" package and a "MultiMapUtils" class has 
been added.
+                     The existing interface "MultiMap" as well as the concrete 
implementation
+                     "MultiValueMap" has been deprecated. 
+o [COLLECTIONS-567]: Added new MultiSet interface which is intended to be a 
replacement for
+                     the Bag interface. The main difference is that a MultiSet 
is fully compatible
+                     to the Collection contract. 
+o [COLLECTIONS-572]: Added set operations to "SetUtils": union, difference, 
intersection and disjunction.
+                     The operations return a view of the result that is backed 
by the input sets. 
+o [COLLECTIONS-557]: Added support to specify the initial size of a "LRUMap". 
Thanks to Philippe Mouawad. 
+o [COLLECTIONS-565]: Added decorators for "NavigableSet" interface. 
+o [COLLECTIONS-464]
+  +COLLECTIONS-442]: Added new class "FluentIterable" to support a fluent API 
for manipulating
+                     Iterable instances. Additionally various supporting 
methods have been
+                     added to "IterableUtils" and "IteratorUtils". 
+o [COLLECTIONS-464]: Added new "ZippingIterator" and factory methods 
"IteratorUtils#zippingIterator(...)". 
+o [COLLECTIONS-464]: Added new decorator "SkippingIterator" and factory 
methods "IteratorUtils#skippingIterator(...)". 
+o [COLLECTIONS-556]: Added method "SetUtils#newIdentityHashSet()" which 
returns a new identity HashSet
+                     using reference-equality instead of object-equality. 
+o [COLLECTIONS-395]: Added method "LRUMap#get(Object, boolean)" that allows to 
query the map
+                     without affecting the least recently used order. Thanks 
to David Hawthorne. 
+o [COLLECTIONS-427]: Added "toString(...)" methods to newly created 
"IterableUtils" and existing "IteratorUtils"
+                     to get a string representation of an Iterable/Iterator 
instance similar to "Arrays#toString(...)".
+                     Thanks to Gonçalo Marques. 
+o [COLLECTIONS-539]: Changed scope of "CircularFifoQueue#isAtFullCapacity()" 
to public. Thanks to Guram Savinov. 
+o [COLLECTIONS-511]: Added new methods "IterableUtils#partition(...)" to 
partition an input collection
+                     into separate output collections based on evaluation of 
one or more predicates.
+                     Thanks to Nathan Blomquist, Brent Worden. 
+o [COLLECTIONS-529]: Added methods "removeAll(...)" and "retainAll(...)" to 
"CollectionUtils" that perform
+                     equality checks using the provided "Equator" object 
instead of "Object#equals()".
+                     Thanks to Alexander Muthmann, Dipanjan Laha. 
+o [COLLECTIONS-503]: Added new transformer "IfTransformer" and factory methods 
"TransformerUtils#ifTransformer(...)"
+                     which replace 
"TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)".
+                     Thanks to Josh Cain. 
+o [COLLECTIONS-471]: Added new decorator "BoundedIterator" and factory methods 
"IteratorUtils#boundedIterator(...)".
+                     Thanks to Radford Tam. 
 
 
 Fixed Bugs
 ----------
 
- o [COLLECTIONS-498] "CollectionBag" will now also respect the contract of the 
decorated bag in case
-                     a null argument is provided to either removeAll or 
retainAll.
- o [COLLECTIONS-481] No collision detection/resolution was performed when 
calling "CompositeSet#addComposited(...)"
-                     with more than one Set as argument. Additionally use 
varargs parameters instead of arrays
-                     in CompositeSet and CompositeCollection constructor and 
addComposited method. Thanks to Hollis Waite.
- o [COLLECTIONS-475] Fixed conversion of timeout parameters in 
"PassiveExpiringMap".
- o [COLLECTIONS-474] ListOrderedMap#putAll(index, Object, Object) does not 
throw an exception anymore if the
-                     map contains null values. Additionally added javadoc 
clarification on the supported bounds
-                     for the index parameter. Thanks to Ning Chen.
- o [COLLECTIONS-472] Improved performance of 
"AbstractMapBag#containsAll(Collection)" by returning immediately
-                     after a difference has been found. Thanks to Adrian 
Nistor.
- o [COLLECTIONS-461] Added additional clarification to javadoc of interface 
"Put" wrt return type of
-                     "put(Object, Object)" method. Thanks to Matt Benson, 
sebb. 
- o [COLLECTIONS-447] Tree traversal with a TreeListIterator will not be 
affected anymore by the removal of an element directly after
-                     a call to previous(). Thanks to Jeffrey Barnes. 
- o [COLLECTIONS-445] Adapt and/or ignore several unit tests when run on a IBM 
J9 VM (specification version 1.6.0) due to a faulty
-                     "java.util.TreeMap" implementation. 
- o [COLLECTIONS-444] SetUniqueList.set(int, E) now works correctly if the 
object to be inserted is already placed at the given position.
-                     Thanks to Thomas Vahrst, John Vasileff. 
- o [COLLECTIONS-441] MultiKeyMap.clone() now correctly calls super.clone(). 
Thanks to Thomas Vahrst. 
- o [COLLECTIONS-433] Improve performance of "TreeList#addAll" and 
"TreeList(Collection)" by converting the input collection into an
-                     AVL tree and efficiently merge it into the existing tree. 
Thanks to Jeffrey Barnes. 
- o [COLLECTIONS-427] Fixed performance issue in "SetUniqueList#retainAll" 
method for large collections. Thanks to Mert Guldur. 
- o [COLLECTIONS-426] Fixed performance issue in "ListOrderedSet#retainAll" 
method for large collections. Thanks to Adrian Nistor. 
- o [COLLECTIONS-425] Improved performance of "ListOrderedMap#remove(Object)" 
method. Thanks to Adrian Nistor. 
- o [COLLECTIONS-421] Update javadoc for "ListUtils#lazyList()" and 
"ListUtils#fixedSizeList()". Thanks to Benedikt Ritter. 
- o [COLLECTIONS-419] Added clarifying javadoc wrt runtime complexity of 
"AbstractDualBidiMap#retainAll". Thanks to Adrian Nistor. 
- o [COLLECTIONS-417] Added clarifying javadoc wrt runtime complexity of 
"AbstractLinkedList#retainAll". Thanks to Adrian Nistor. 
- o [COLLECTIONS-415] Added clarifying javadoc wrt runtime complexity of 
"AbstractLinkedList#removeAll". Thanks to Adrian Nistor. 
- o [COLLECTIONS-414] Fixed several compilation issues with older Java 1.6 
compilers. 
- o [COLLECTIONS-413] Improved performance of "removeAll()" method for sets 
returned by "DualHashBidiMap#entrySet()". Thanks to Adrian Nistor. 
- o [COLLECTIONS-412] Improved performance of "CollectionUtils#subtract" 
methods. Thanks to Adrian Nistor. 
- o [COLLECTIONS-411] Fixed possible "IndexOutOfBoundsException" in 
"ListOrderedMap#putAll". Thanks to Adrian Nistor. 
- o [COLLECTIONS-410] Improved performance of "SetUniqueList#addAll" method. 
Thanks to Adrian Nistor. 
- o [COLLECTIONS-409] Improved performance of "ListOrderedSet#addAll" method. 
Thanks to Adrian Nistor. 
- o [COLLECTIONS-408] Improved performance of "SetUniqueList#removeAll". Thanks 
to Adrian Nistor. 
- o [COLLECTIONS-407] Improved performance of "ListOrderedSet#remove(Object)" 
in case the object is  not contained in the Set. Thanks to Adrian Nistor. 
- o [COLLECTIONS-406] Improved performance of "ListUtils#subtract" method. 
Thanks to Adrian Nistor. 
- o [COLLECTIONS-400] Added missing null check in 
"CollectionUtils#addIgnoreNull(Collection, Object)". Thanks to Shin Hwei Tan. 
- o [COLLECTIONS-391] Fixed javadoc for "MapUtils#toProperties(Map)". Thanks to 
Shin Hwei Tan. 
- o [COLLECTIONS-389] Clarified javadoc for "TransformerUtils#mapTransformer" 
for null input. Thanks to Shin Hwei Tan. 
- o [COLLECTIONS-388] Clarified javadoc for "FactoryUtils#prototypeFactory" for 
null input. Thanks to Shin Hwei Tan. 
- o [COLLECTIONS-384] Fixed inconsistent javadoc for 
"MapUtils#synchronizedMap(Map)". Thanks to Shin Hwei Tan. 
- o [COLLECTIONS-380] Fixed infinite loop when calling 
"UnmodifiableBoundedCollection#unmodifiableBoundedCollection()". Thanks to Dave 
Brosius. 
- o [COLLECTIONS-379] Fixed javadoc for several methods wrt expected 
NullPointerExceptions. Thanks to Shin Hwei Tan. 
- o [COLLECTIONS-364] "DualTreeBidiMap" now uses the correct comparator for the 
reverse map during de-serialization. 
- o [COLLECTIONS-363] "TransformedMap" in the package "splitmap" can now be 
serialized. 
- o [COLLECTIONS-360] "FilterListIterator#hasNext" does not throw a 
NullPointerException anymore to comply to the Java iterator specification.
-                     Thanks to Sai Zhang. 
- o [COLLECTIONS-359] "ListUtils#intersection(List, List)" will now also work 
correctly if there are duplicate elements in the provided lists.
-                     Thanks to Mark Shead. 
- o [COLLECTIONS-352] "AbstractCollectionDecorator" will now use internally 
"decorated()" to access the decorated collection. Thanks to Adam Gent. 
- o [COLLECTIONS-350] Removed debug output in "MapUtils#getNumber(Map)". Thanks 
to Michael Akerman. 
- o [COLLECTIONS-348] Fixed javadoc for all "transformedXXX(XXX)" methods in 
the respective Utils classes to clarify that existing objects in the
-                     list are not transformed. Thanks to Paul Benedict. 
- o [COLLECTIONS-343] Singleton classes in package "functors" are now correctly 
de-serialized. Thanks to Goran Hacek. 
- o [COLLECTIONS-340] Removed broken methods "equals(Object)" and "hashCode()" 
in class "NOPClosure". Thanks to Goran Hacek. 
- o [COLLECTIONS-336] Simplified exceptions as the cause is available from the 
parent. Thanks to sebb. 
- o [COLLECTIONS-335] Fixed cache assignment for "TreeBidiMap#entrySet". Thanks 
to sebb. 
- o [COLLECTIONS-334] Synchronized access to lock in "StaticBucketMap#size()". 
Thanks to sebb. 
- o [COLLECTIONS-332] Added clarification to javadoc of "ListOrderedMap" that 
"IdentityMap" and "CaseInsensitiveMap" are not supported.
-                     Thanks to Tom Parker. 
- o [COLLECTIONS-331] Improve javadoc of "CollatingIterator" wrt the used 
"Comparator" and throw a NullPointerException in "CollatingIterator#least"
-                     if no comparator is set. Thanks to Michael Krkoska. 
- o [COLLECTIONS-330] "LRUMap#keySet()#remove(Object)" will not throw a 
"ConcurrentModificationException" anymore. Thanks to Joerg Schaible. 
- o [COLLECTIONS-328] Improved performance of "ListUtils#intersection(List, 
List)". Thanks to Thomas Rogan, Jilles van Gurp. 
- o [COLLECTIONS-323] Changed behavior of "CaseInsensitiveMap" constructor to 
be compliant with "HashMap" in case the initial capacity is set to zero.
-                     Thanks to Maarten Brak. 
- o [COLLECTIONS-320] Improved performance of "StaticBucketMap#putAll(Map)" by 
iterating over the entry set. Thanks to sebb. 
- o [COLLECTIONS-319] Avoid redundant null check in 
"IteratorUtils#getIterator(Object)". Thanks to sebb. 
- o [COLLECTIONS-317] Use a private method to populate the object in 
"AbstractHashedMap(Map)". Thanks to sebb. 
- o [COLLECTIONS-316] Fixed javadoc of "LRUMap" wrt to the maxSize parameter of 
the constructor. Thanks to ori. 
- o [COLLECTIONS-312] Use of final keyword where applicable, minor performance 
improvements by properly initializing the capacity of newly created
-                     collections when known in advance. Thanks to Peter 
Lawrey, Gary Gregory. 
- o [COLLECTIONS-307] "SetUniqueList#subList()#contains(Object)" will now 
correctly check the subList rather than the parent list.
-                     Thanks to Christian Semrau. 
- o [COLLECTIONS-304] "SetUniqueList#set(int, Object)" will now correctly 
enforce the uniqueness constraint. Thanks to Rafał Figas,Bjorn Townsend. 
- o [COLLECTIONS-303] Improved javadoc for "Unmodifiable*" classes wrt behavior 
when the users tries to modify the collection. Thanks to Emmanuel Bourg. 
- o [COLLECTIONS-294] "CaseInsensitiveMap" will now convert input strings to 
lower-case in a locale-independant manner. Thanks to Benjamin Bentmann. 
- o [COLLECTIONS-256] Fixed javadoc for "ListUtils#transformedList(List)" to 
clarify that existing objects in the list are not transformed.
-   +COLLECTIONS-288] Thanks to Paul Benedict. 
- o [COLLECTIONS-266] "MultiKey" will now be correctly 
serialized/de-serialized. Thanks to Joerg Schaible. 
- o [COLLECTIONS-262] Fixed javadoc for methods "firstKey()" and "lastKey()" in 
class "AbstractLinkedMap". Thanks to Lisen Mu. 
- o [COLLECTIONS-261] "Flat3Map#remove(Object)" will now return the correct 
value mapped to the removed key if the size of the map is less or equal 3.
-                     Thanks to ori. 
- o [COLLECTIONS-255] Removed unused variables in "TreeBidiMap". Thanks to 
Henri Yandell. 
- o [COLLECTIONS-249] "SetUniqueList.addAll(int, Collection)" now correctly add 
the collection at the provided index. Thanks to Joe Kelly. 
- o [COLLECTIONS-232] Fixed several unit tests which were using parameters to 
"assertEquals(...)" in wrong order. Thanks to Mark Hindess. 
- o [COLLECTIONS-228] "MultiValueMap#put(Object, Object)" and 
"MultiValueMap#putAll(Object, Collection)" now correctly return if the map
-                     has changed by this operation. 
- o [COLLECTIONS-219] "CollectionUtils#removeAll" wrongly called 
"ListUtils#retainAll". Thanks to Tom Leccese. 
- o [COLLECTIONS-217] Calling "setValue(Object)" on any Entry returned by a 
"Flat3Map" will now correctly set the value for the current entry.
-                     Thanks to Matt Bishop. 
- o [COLLECTIONS-216] "MultiKey#toString()" will now use 
"Arrays#toString(List)". Thanks to Hendrik Maryns. 
+o [COLLECTIONS-580]: Added validation when de-serializing a 
"MultiValueMap#ReflectionFactory":
+                     only Collection classes are allowed, otherwise an 
UnsupportedOperationException
+                     will be thrown during de-serialization. 
+o [COLLECTIONS-576]: Subclasses of MultiKey did not re-calculate their 
hashcode after de-serialization.
+                     Thanks to Stephan Roch. 
+o [COLLECTIONS-566]: "IteratorUtils#collate(...)" methods did not use natural 
ordering when a
+                     null comparator was provided. 
+o [COLLECTIONS-558]: Changed return type of "ListOrderedSet#remove(int)" from 
Object to the generic
+                     type parameter. Thanks to Felix Rabe. 
+o [COLLECTIONS-555]: Added clarification to javadoc of "TreeBag#add(Object)" 
wrt null arguments.
+                     Thanks to M Kim. 
+o [COLLECTIONS-427]: Reverted performance improvement for 
"SetUniqueList#retainAll(Collection)"
+                     introduced in 4.0. Added clarifying javadoc wrt runtime 
complexity instead. 
+o [COLLECTIONS-426]: Reverted performance improvement for 
"ListOrderedSet#retainAll(Collection)"
+                     introduced in 4.0. Added clarifying javadoc wrt runtime 
complexity instead. 
+o [COLLECTIONS-530]: Added a Builder for "PredicatedCollection". Elements 
added to the builder
+                     that fail the predicate will not throw an 
IllegalArgumentException. The builder
+                     supports creating predicated lists, bags, sets and 
queues. Thanks to Erik. 
+o [COLLECTIONS-545]: Documented runtime complexity of 
"CollectionUtils#removeAll(Collection, Collection).
+                     Thanks to Oswaldo Olivo. 
+o [COLLECTIONS-543]: "AbstractCollectionDecorator" doesn't forward equals and 
hashCode anymore. 
+o [COLLECTIONS-544]: Documented runtime complexity of 
"CollectionUtils#retainAll(Collection, Collection).
+                     Thanks to Oswaldo Olivo. 
+o [COLLECTIONS-542]: "AbstractHashedMap" still inherits from "AbstractMap", 
contrary to what
+                     the class javadoc stated. The inheritance will now be 
removed in v5.0. 
+o [COLLECTIONS-525]: The map returned by "PatriciaTrie#prefixMap()" did not 
contain all keys
+                     that are prefixed by the given search key in some rare 
cases. Thanks to Zigler Zhang. 
+o [COLLECTIONS-537]: Harmonized signature of factory methods for 
functor-related classes which take
+                     a collection as input with their array counterparts. 
Thanks to Frank Jakop. 
+o [COLLECTIONS-540]: Added overloaded method "CollectionUtils#get(Enumeration, 
int)" and simplified
+                     code for "CollectionUtils#get(Object, int)". Thanks to 
Daniel Stewart, Issam El Atif. 
+o [COLLECTIONS-536]: Improved check for null input in "MapUtils#putAll(Map, 
Object[])". Thanks to Tagir Valeev. 
+o [COLLECTIONS-534]: Added clarifying javadoc wrt runtime complexity of 
"CollectionBag#retainAll".
+                     Thanks to Oswaldo Olivo. 
+o [COLLECTIONS-531]: Use correct type bounds in
+                     "CollectionUtils#isEqualCollection(Collection, 
Collection, Equator)" to
+                     prevent a "ClassCastException" at runtime for invalid 
inputs. Thanks to Dipanjan Laha. 
+o [COLLECTIONS-523]: Removed unneeded private method in "PassiveExpiringMap". 
Thanks to Thiago Andrade. 
+o [COLLECTIONS-516]: Added clarification to the javadoc of 
"MapUtils#toProperties(Map)" in case
+                     of null keys/values. Thanks to Cyrille Artho. 
+o [COLLECTIONS-524]: "ListOrderedSet#listOrderedSet(List)" did not remove 
duplicates from the
+                     input list as advertised in the javadoc. Thanks to J 
Goodfellow. 
+o [COLLECTIONS-521]: "MultiKeyMap" was throwing a "NullPointerException" for 
various operations
+                     if two key arguments have been used and the second was 
"null". Thanks to Maxime Nay. 
+o [COLLECTIONS-522]: Updated code example for "PredicatedList". Thanks to 
Erik. 
+o [COLLECTIONS-512]: "TransformingComparator" and "FixedOrderComparator" did 
not comply with
+                     the contract of "Object#equals". Thanks to Cyrille Artho. 
+o [COLLECTIONS-510]: Fix compilation errors when using source level 1.8 and a 
recent java 8 compiler.
+                     Thanks to Hollis Waite. 
+o [COLLECTIONS-509]: Clarified javadoc of "CollectionBag" wrt changes from the 
original Bag interface. 
+o [COLLECTIONS-507]: Removed wrong type bounds for 
"ComparatorUtils#chainedComparator(...)". Thanks to Gerson. 
+o [COLLECTIONS-506]: Added javadoc clarification to class "CollectionUtils" 
that input objects which
+                     override "Object#equals(Object)" must also maintain the 
general contract of
+                     "Object#hashCode()" as various utility methods take 
advantage of sets/maps/bags.
+                     Thanks to Anthony Communier. 
 
-
-For complete information on Commons Collections, including instructions on how 
to submit bug reports,
-patches, or suggestions for improvement, see the Apache Commons Collections 
website:
+ 
+For complete information on Apache Commons Collections, including instructions 
on how to submit bug reports,
+patches, or suggestions for improvement, see the Apache Apache Commons 
Collections website:
 
 http://commons.apache.org/proper/commons-collections/



Reply via email to