              Apache Commons Collections 4.4 RELEASE NOTES

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

Maintenance release.

Changes in this version include:

New features:
o COLLECTIONS-715:  Implement Collection's removeIf(). Thanks to morningmemo, Gary Gregory. 
o COLLECTIONS-719:  Create a PropertiesFactory and SortedPropertiesFactory. Thanks to Gary Gregory. 
o COLLECTIONS-719:  Support Transformer for LazyList #52. Thanks to Stephan Windmüller, Bruno P. Kinoshita. 
o COLLECTIONS-723:  Make use of FunctionalInterface #48. Thanks to Eitan Adler, SOC, Bruno P. Kinoshita. 

Fixed Bugs:
o COLLECTIONS-710:  NullPointerExceptions in CompositeCollection, CompositeSet, and CompositeMap. Thanks to Yu Shi, Gary Gregory. 

Changes:
o COLLECTIONS-718:  Fix LRUMap exception message. Thanks to Eitan Adler. 
o COLLECTIONS-716:  Don't include email address in Exception messages. Thanks to Sebb. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_pool.cgi

===============================================================================

              Apache Commons Collections 4.3 RELEASE NOTES

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

Update from Java 7 to Java 8, bug fixes, and small changes.

Changes in this version include:

New features:
o COLLECTIONS-696:  AbstractReferenceMap made easier for subclassing; PR #51. Thanks to Maxim Solodovnik.

Fixed Bugs:
o COLLECTIONS-691:  Use boolean operator for boolean result. Thanks to Eitan Adler.
o COLLECTIONS-701:  StackOverflowError in SetUniqueList.add() when it receives itself. Thanks to Shin Hong, Don Jeba.
o COLLECTIONS-703:  The PassiveExpiringMap#put() method should return the previous record only if not expired. Thanks to Tomas Tulka.
o COLLECTIONS-706:  Add SetUtils.unmodifiableSet(T... items) method. Thanks to Richard Eckart de Castilho, Gary Gregory.

Changes:
o COLLECTIONS-688:  Update platform requirement from Java 7 to 8.
o COLLECTIONS-689:  Link to Javadoc API broken. Thanks to Richard Walker.
o COLLECTIONS-692:  Replace use of deprecated Class#newInstance() PR #49. Thanks to Gary Gregory, Eitan Adler.

Please NOTE: Clirr errors reported for this release are false positive, this is proved by Japicmp report
And manual testing.

For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

===============================================================================

              Apache Commons Collections 4.2 RELEASE NOTES

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

Update from Java 6 to Java 7, bug fixes, and small changes.

Changes in this version include:

New features:
o COLLECTIONS-681:  Add test for MultiSetUtils Thanks to Stephan Fuhrmann. 
o COLLECTIONS-658:  Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility. 
o COLLECTIONS-589:  Add null-safe MapUtils.size(Map<?, ?>) method. Thanks to Gary Gregory. 
o COLLECTIONS-586:  PatriciaTrie prefixMap clear throws NullPointerException. Thanks to Shailender Bathula, Gary Gregory. 
o COLLECTIONS-654:  Add class SortedProperties to sort keys. 
o COLLECTIONS-668:  Add CollectionUtils containsAny method for primitive array: org.apache.commons.collections4.CollectionUtils.containsAny(Collection<?>, T...). Thanks to Gary Gregory. 
o COLLECTIONS-575:  Synchronized queue wrapper in QueueUtils. Thanks to Guram Savinov, Grzegorz Rożniecki, Bruno P. Kinoshita, Gary Gregory. 
o COLLECTIONS-670:  Add org.apache.commons.collections4.IteratorUtils.first(Iterator). Thanks to Gary Gregory. 
o COLLECTIONS-671:  Add org.apache.commons.collections4.IterableUtils.first(Iterable). Thanks to Gary Gregory. 

Fixed Bugs:
o COLLECTIONS-599:  HashEntry array object naming data initialized with double the size during deserialization. Thanks to Tejas Patel, Saleem Akbar, Gary Gregory. 
o COLLECTIONS-662:  Unit tests MapUtilsTest and ListIteratorWrapperTest no longer fail on Java 9. Thanks to Vamsi Kavuri. 
o COLLECTIONS-661:  Intermittent test failures in Windows for HashSetValuedHashMap. 
o COLLECTIONS-660:  Uncomment test in AbstractMapTest regarding LRUMap equals. 
o COLLECTIONS-656:  Fix site build on Java 8. 
o COLLECTIONS-653:  Update Javadoc to Build on Java 1.8. 
o COLLECTIONS-606:  Build status, Coverage status and Maven central weren't in README.md Thanks to Vamsi Kavuri. 
o COLLECTIONS-594:  Website spelling error: MultiValuedMapList. Thanks to Javen O'Neal.
o COLLECTIONS-597:  Correction of Javadoc for org.apache.commons.collections4.functors.CatchAndRethrowClosure. Thanks to Enrique. 
o COLLECTIONS-678:  The verification of unsupported iterator methods is not complete. Thanks to Oscar Luis Vera Pérez. 
o COLLECTIONS-673:  ListUtils.partition potential integer overflow. Thanks to John Mark, Stephan Fuhrmann. 

Changes:
o COLLECTIONS-602:  Improve efficiency of DefaultedMap.get. Thanks to John Mark. 
o COLLECTIONS-603:  Small improvements for generics, conditional statements, and warnings suppressions. Thanks to Artem Konovalov. 
o COLLECTIONS-655:  Update platform from Java 6 to Java 7. 
o COLLECTIONS-666:  org.apache.commons.collections4.ListUtils.union(List, List) should pre-allocate result list. Thanks to BELUGA BEHR. 
o COLLECTIONS-669:  Update org.apache.commons.collections4.CollectionUtils.addAll(Collection<C>, C[]) to addAll(Collection<C>, C...). Thanks to BELUGA BEHR, Gary Gregory. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

===============================================================================

              Apache Commons Collections
                     Version 4.1
                    RELEASE NOTES

INTRODUCTION:

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 update to this release.


Compatibility
-------------

 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
-----------------------

 o Added interface MultiSet (package multiset)
 o Added interfaces 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-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-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 Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

===============================================================================

              Apache Commons Collections
                    Version 3.2.2
                    RELEASE NOTES


INTRODUCTION:

Commons collections is a project to develop and maintain collection classes
based on and inspired by the JDK collection framework.
This release is JDK1.3 compatible, and does not use JDK1.5 generics.

This v3.2.2 release is a bugfix release, fixing several bugs present in the previous
releases of the 3.2 branch. Additionally, this release provides a mitigation for a
known remote code exploitation via the standard java object serialization mechanism.
By default, serialization support for unsafe classes in the functor package is
disabled and will result in an exception when either trying to serialize or de-serialize
an instance of these classes. For more details, please refer to COLLECTIONS-580.

All users are strongly encouraged to update to this release.


Changes in this version include:

CHANGES
=======

o COLLECTIONS-580:  Serialization support for unsafe classes in the functor package is
                    disabled by default as this can be exploited for remote code execution
                    attacks. To re-enable the feature the system property
                    "org.apache.commons.collections.enableUnsafeSerialization" needs to be
                    set to "true".
                    Classes considered to be unsafe are: CloneTransformer, ForClosure,
                    InstantiateFactory, InstantiateTransformer, InvokerTransformer,
                    PrototypeCloneFactory, PrototypeSerializationFactory, WhileClosure.

BUGFIXES
========

o COLLECTIONS-538:  "ExtendedProperties" will now use a privileged action to access the
                    "file.separator" system property. In case the class does not have
                    permission to read system properties, the "File#separator" field will
                    be used instead. Thanks to Trejkaz. 
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-444:  SetUniqueList.set(int, Object) now works correctly if the object to be inserted
                    is already placed at the given position. Thanks to Thomas Vahrst, John Vasileff. 
o COLLECTIONS-350:  Removed debug output in "MapUtils#getNumber(Map)". Thanks to Michael Akerman. 
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-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-294:  "CaseInsensitiveMap" will now convert input strings to lower-case in a
                    locale-independent manner. Thanks to Benjamin Bentmann. 
o COLLECTIONS-266:  "MultiKey" will now be correctly serialized/de-serialized. Thanks to Joerg Schaible. 
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-249:  "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the
                    provided index. Thanks to Joe Kelly. 
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. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/collections/
