              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:  Web site spelling error: MultiValuedMapeList. 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 updated 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 updated 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/
