From 5023b45c003e240a90e6a702c53cb3fda61365f4 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Wed, 27 Dec 2017 16:03:51 -0700 Subject: [PATCH] Fix formatting nits. --- src/changes/changes.xml | 1784 +++++++++++++++++++-------------------- 1 file changed, 892 insertions(+), 892 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 3c17f9203..9ad516181 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -1,892 +1,892 @@ - - - - - Commons Collections Changes - - - - - Unit tests MapUtilsTest and ListIteratorWrapperTest no longer fail in java 9 - - - Intermittent test failures in Windows for HashSetValuedHashMap - - - Uncomment test in AbstractMapTest regarding LRUMap equals - - - Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility - - - Fix site build on Java 8 - - - Update Javadoc to Build on Java 1.8 - - - Build status, Coverage status and Maven central weren't in README.md - - - Improve efficiency of DefaultedMap.get - - - Small improvements for generics, conditional statements, and warnings suppressions. - - - Update platform from Java 6 to Java 7. - - - Web site spelling error: MultiValuedMapeList. - - - Correction of javadoc for org.apache.commons.collections4.functors.CatchAndRethrowClosure. - - - Add null-safe MapUtils.size(Map<?, ?>) method. - - - PatriciaTrie prefixMap clear throws NullPointerException. - - - Add class SortedProperties to sort keys. - - - - - 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. - - - Deprecated various method in "CollectionUtils" in favor of similar - methods in the newly introduced "IterableUtils". - - - 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. - - - Added validation when de-serializing a "MultiValueMap#ReflectionFactory": - only Collection classes are allowed, otherwise an UnsupportedOperationException - will be thrown during de-serialization. - - - 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. - - - Subclasses of MultiKey did not re-calculate their hashcode after de-serialization. - - - 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. - - - All constructors and static factory methods will now throw a "NullPointerException" if - a required input argument is null. Previously sometimes a "IllegalArgumentException" was used. - - - Deprecated methods "synchronizedCollection(Collection)" and "unmodifiableCollection(Collection)" - in class "CollectionUtils", the corresponding methods in "java.util.Collections" should be used instead. - - - "IteratorUtils#collate(...)" methods did not use natural ordering when a - null comparator was provided. - - - Added support to specify the initial size of a "LRUMap". - - - Added decorators for "NavigableSet" interface. - - - Added new class "FluentIterable" to support a fluent API for manipulating - Iterable instances. Additionally various supporting methods have been - added to "IterableUtils" and "IteratorUtils". - - - Added new "ZippingIterator" and factory methods "IteratorUtils#zippingIterator(...)". - - - Added new decorator "SkippingIterator" and factory methods "IteratorUtils#skippingIterator(...)". - - - Added method "SetUtils#newIdentityHashSet()" which returns a new identity HashSet - using reference-equality instead of object-equality. - - - Upgraded minimum java requirement to Java 6 (up from Java 5). - - - Added method "LRUMap#get(Object, boolean)" that allows to query the map - without affecting the least recently used order. - - - Changed return type of "ListOrderedSet#remove(int)" from Object to the generic type parameter. - - - Added clarification to javadoc of "TreeBag#add(Object)" wrt null arguments. - - - Added "toString(...)" methods to newly created "IterableUtils" and existing "IteratorUtils" - to get a string representation of an Iterable/Iterator instance similar to "Arrays#toString(...)". - - - Reverted performance improvement for "SetUniqueList#retainAll(Collection)" - introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. - - - Reverted performance improvement for "ListOrderedSet#retainAll(Collection)" - introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. - - - 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. - - - Documented runtime complexity of "CollectionUtils#removeAll(Collection, Collection). - - - "AbstractCollectionDecorator" doesn't forward equals and hashCode anymore. - - - Documented runtime complexity of "CollectionUtils#retainAll(Collection, Collection). - - - "AbstractHashedMap" still inherits from "AbstractMap", contrary to what - the class javadoc stated. The inheritance will now be removed in v5.0. - - - Changed scope of "CircularFifoQueue#isAtFullCapacity()" to public. - - - The map returned by "PatriciaTrie#prefixMap()" did not contain all keys - that are prefixed by the given search key in some rare cases. - - - Added new methods "IterableUtils#partition(...)" to partition an input collection - into separate output collections based on evaluation of one or more predicates. - - - Harmonized signature of factory methods for functor-related classes which take - a collection as input with their array counterparts. - - - Added overloaded method "CollectionUtils#get(Enumeration, int)" and simplified - code for "CollectionUtils#get(Object, int)". - - - Improved check for null input in "MapUtils#putAll(Map, Object[])". - - - Added clarifying javadoc wrt runtime complexity of "CollectionBag#retainAll". - - - Added methods "removeAll(...)" and "retainAll(...)" to "CollectionUtils" that perform - equality checks using the provided "Equator" object instead of "Object#equals()". - - - Use correct type bounds in - "CollectionUtils#isEqualCollection(Collection, Collection, Equator)" to - prevent a "ClassCastException" at runtime for invalid inputs. - - - Removed unneeded private method in "PassiveExpiringMap". - - - Added clarification to the javadoc of "MapUtils#toProperties(Map)" in case - of null keys/values. - - - "ListOrderedSet#listOrderedSet(List)" did not remove duplicates from the - input list as advertised in the javadoc. - - - "MultiKeyMap" was throwing a "NullPointerException" for various operations - if two key arguments have been used and the second was "null". - - - Updated code example for "PredicatedList". - - - "TransformingComparator" and "FixedOrderComparator" did not comply with - the contract of "Object#equals". - - - Fix compilation errors when using source level 1.8 and a recent java 8 compiler. - - - Clarified javadoc of "CollectionBag" wrt changes from the original Bag interface. - - - Removed wrong type bounds for "ComparatorUtils#chainedComparator(...)". - - - 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. - - - Added new transformer "IfTransformer" and factory methods "TransformerUtils#ifTransformer(...)" - which replace "TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)". - - - Added new decorator "BoundedIterator" and factory methods "IteratorUtils#boundedIterator(...)". - - - - - 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(). - - - 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. - - - 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. - - - Refactored the test framework for Bag implementations to extend from - "AbstractCollectionTest" by decorating the concrete Bag instance with - a CollectionBag or CollectionSortedBag. - - - "CollectionBag" will now also respect the contract of the decorated bag in case - a null argument is provided to either removeAll or retainAll. - - - Added bag decorator "CollectionSortedBag" which decorates a SortedBag to make it - comply with the Collection contract. - - - "UnmodifiableBoundedCollection" does now also implement the marker interface "Unmodifiable" - similar as all other unmodifiable decorators. - - - "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. - - - Moved "Equator" interface to base package for consistency. - - - Added "CollectionsUtils#matchesAll(Iterable, Predicate)" to test if all elements - of a collection match a given predicate. - - - Accept wildcard input where possible, e.g. in copy-constructors, Unmodifiable* decorators - and iterators. - - - 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. - - - Narrow return type of "BidiMap#values()" to Set as the values are required to be unique. - - - Fixed conversion of timeout parameters in "PassiveExpiringMap". - - - Exception in "ListOrderedMap#putAll" if map contains null values. - - - Made field "collection" in class "AbstractCollectionDecorator" private and added - setter "setCollection(Collection)" with scope protected to set the decorated collection - during de-serialization. - - - Improved performance of "AbstractMapBag#containsAll(Collection)" by returning immediately - after a difference has been found. - - - Renamed class "TransformedMap" in package "splitmap" to "TransformedSplitMap" to avoid - name clash with similar class in package "map". - - - Added bag decorator "CollectionBag" which decorates a bag to make it comply with the - Collection contract. - - - Replaced "Collection" with "Iterable" for method arguments where applicable. - - - Added "PushbackIterator" decorator to support pushback of elements during iteration. - - - Added "PeekingIterator" decorator to support one-element lookahead during iteration. - - - Added additional clarification to javadoc of interface "Put" wrt return type of - "put(Object, Object)" method. - - - 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()". - - - Removed method "setArray(Object)" in class ArrayIterator and method "setArray(Object[])" - in class ObjectArrayIterator and made fields array, startIndex and endIndex final. - - - Removed unused class "AbstractUntypedCollectionDecorator<E, D>". - - - Added methods "ListUtils#longestCommonSubsequence(...)" to get the longest common subsequence - of arbitrary lists or CharSequences. - - - Changed scope of fields to private where appropriate. - - - An iterator over a "Flat3Map#entrySet()" will now return - independent Map.Entry objects that will not change anymore when - the iterator progresses. - - - Several closure and transformer implementations in the functors package - will now copy an array as input to their constructor (e.g. ChainedClosure). - - - Change base package to org.apache.commons.collections4. - - - The constructors for all Utils classes are now private to prevent instantiation. - - - Added methods "forAllButLastDo(Collection, Closure)" and "forAllButLastDo(Iterator, Closure)" - to class "CollectionUtils". - - - Tree traversal with a TreeListIterator will not be affected anymore by - the removal of an element directly after a call to previous(). - - - Added method "CollectionUtils#isEqualCollection(Collection, Collection, Equator)". - - - 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. - - - SetUniqueList.set(int, E) now works correctly if the object to be inserted - is already placed at the given position. - - - MultiKeyMap.clone() now correctly calls super.clone(). - - - Added "emptyIfNull" methods to classes "CollectionUtils", "ListUtils", "SetUtils" - and "MapUtils". - - - 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. - - - Replaced "Buffer" interface with "java.util.Queue". Kept "CircularFifoQueue" - as well as "Predicated", "Transformed" and "Unmodifiable" decorators. - - - Added method "CollectionUtils#containsAll(Collection, Collection)" with guaranteed - runtime complexity of O(n + m) 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. - - - Fixed performance issue in "SetUniqueList#retainAll" method for large collections. - - - Fixed performance issue in "ListOrderedSet#retainAll" method for large collections. - - - Improved performance of "ListOrderedMap#remove(Object)" method. - - - "CompositeSet" does not inherit from "CompositeCollection" anymore. The inner class - "SetMutator" has been updated accordingly. - - - Added method "CollectionUtils#permutations(Collection)" and class "PermutationIterator" - to generate unordered permutations of a collection. - - - Update javadoc for "ListUtils#lazyList()" and "ListUtils#fixedSizeList()". - - - Added clarifying javadoc wrt runtime complexity of "AbstractDualBidiMap#retainAll". - - - Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#retainAll". - - - Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#removeAll". - - - Fixed several compilation issues with older Java 1.6 compilers. - - - Improved performance of "removeAll()" method for sets returned by "DualHashBidiMap#entrySet()". - - - Improved performance of "CollectionUtils#subtract" methods. - - - Fixed possible "IndexOutOfBoundsException" in "ListOrderedMap#putAll". - - - Improved performance of "SetUniqueList#addAll" method. - - - Improved performance of "ListOrderedSet#addAll" method. - - - Improved performance of "SetUniqueList#removeAll". - - - Improved performance of "ListOrderedSet#remove(Object)" in case the object is - not contained in the Set. - - - Improved performance of "ListUtils#subtract" method. - - - Added "ListUtils#select" and "ListUtils#selectRejected" methods. - - - Added an implementation of Eugene Myers difference algorithm in package - o.a.c.c.sequence. - - - Added missing null check in "CollectionUtils#addIgnoreNull(Collection, Object)". - - - Added new method "get(int)" to "CircularFifoQueue". - - - Added "LazyIteratorChain" iterator. - - - Added "ListUtils#partition" method to split a List into consecutive sublists. - - - Fixed javadoc for "MapUtils#toProperties(Map)". - - - Clarified javadoc for "TransformerUtils#mapTransformer" for null input. - - - Clarified javadoc for "FactoryUtils#prototypeFactory" for null input. - - - Fixed inconsistent javadoc for "MapUtils#synchronizedMap(Map)". - - - Added "CollectionUtils#forAllDo" implementation which takes an "Iterator" as input. - - - Change maven coordinates to "org.apache.commons.commons-collections4". - - - Move the project structure to a standard maven layout. - - - Fixed infinite loop when calling "UnmodifiableBoundedCollection#unmodifiableBoundedCollection()". - - - Fixed javadoc for several methods wrt expected NullPointerExceptions. - - - Added method "ListUtils#defaultIfNull(List, List)". - - - TransformingComparator now supports different types for its input/output values. - - - "DualTreeBidiMap" now uses the correct comparator for the reverse map during de-serialization. - - - "TransformedMap" in the package "splitmap" can now be serialized. - - - "CollectionUtils#filter(Iterable, Predicate)" will now return whether the collection - has been modified. - - - Add method "CollectionUtils#filterInverse(Iterable, Predicate)". - - - "FilterListIterator#hasNext" does not throw a NullPointerException anymore - to comply to the Java iterator specification. - - - "ListUtils#intersection(List, List)" will now also work correctly if there - are duplicate elements in the provided lists. - - - "AbstractCollectionDecorator" will now use internally "decorated()" to access - the decorated collection. - - - Removed features which are now supported by the JDK. - - - Removed debug output in "MapUtils#getNumber(Map)". - - - Fixed javadoc for all "transformedXXX(XXX)" methods in the respective Utils classes - to clarify that existing objects in the list are not transformed. - - - Singleton classes in package "functors" are now correctly de-serialized. - - - "NOPClosure" is now a final class. - - - Removed broken methods "equals(Object)" and "hashCode()" in class "NOPClosure". - - - Simplified exceptions as the cause is available from the parent. - - - Fixed cache assignment for "TreeBidiMap#entrySet". - - - Synchronized access to lock in "StaticBucketMap#size()". - - - Added clarification to javadoc of "ListOrderedMap" that "IdentityMap" and - "CaseInsensitiveMap" are not supported. - - - Improve javadoc of "CollatingIterator" wrt the used "Comparator" and throw a - NullPointerException in "CollatingIterator#least" if no comparator is set. - - - "LRUMap#keySet()#remove(Object)" will not throw a "ConcurrentModificationException" anymore. - - - Improved performance of "ListUtils#intersection(List, List)". - - - Added serialVersionUID fields for "CompositeCollection", "CompositeSet", - "EmptyMapMutator", "EmptySetMutator". - - - Fields transformer and decorated in class "TransformingComparator" are now final. - - - Changed behavior of "CaseInsensitiveMap" constructor to be compliant with "HashMap" - in case the initial capacity is set to zero. - - - Added NodeListIterator and convenience methods in IteratorUtils to iterate over - a org.w3c.dom.NodeList. - - - Improved performance of "StaticBucketMap#putAll(Map)" by iterating over the entry set. - - - Avoid redundant null check in "IteratorUtils#getIterator(Object)". - - - Use a private method to populate the object in "AbstractHashedMap(Map)". - - - Fixed javadoc of "LRUMap" wrt to the maxSize parameter of the constructor. - - - Added new abstract class "CatchAndRethrowClosure" that re-throws any checked exception - as unchecked "FunctorException". - - - Use of final keyword where applicable, minor performance improvements by properly - initializing the capacity of newly created collections when known in advance. - - - "SetUniqueList#subList()" will now return an unmodifiable list as changes to it - may invalidate the parent list. - - - "SetUniqueList#subList()#contains(Object)" will now correctly check the subList - rather than the parent list. - - - Added method "CollectionUtils#subtract(Iterable, Iterable, Predicate)". - - - "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint. - - - Improved javadoc for "Unmodifiable*" classes wrt behavior when the users tries - to modify the collection. - - - Calling "CollectionUtils#sizeIsEmpty(null)" will now return true. - - - Added methods "CollectionUtils#collate(...)" to merge two sorted Collections - into a sorted List using the standard O(n) merge algorithm. - - - "CaseInsensitiveMap" will now convert input strings to lower-case in a - locale-independant manner. - - - Added support for using custom "Equator" objects in "EqualPredicate". - - - Added method "CollatingIterator#getIteratorIndex()". - - - Fixed javadoc for "ListUtils#transformedList(List)" to clarify that existing objects - in the list are not transformed. - - - Added method "CollectionUtils#extractSingleton(Collection)". - - - Added serialization support for "TreeBidiMap". - - - The predicate that rejected an object to be added to a "PredicatedCollection" - is now contained in the respective exception message. - - - Added "IndexedCollection" collection decorator which provides a map-like - view on an existing collection. - - - Added serialization support for "FixedOrderComparator" and "TransformingComparator". - - - "MultiKey" will now be correctly serialized/de-serialized. - - - "TreeBag" will now only accept "Comparable" objects as input when used with natural ordering. - - - Added methods "MapUtils#populateMap(MultiMap, ...)" to support also "MultiMap" instances - as input. - - - Fixed javadoc for methods "firstKey()" and "lastKey()" in class "AbstractLinkedMap". - - - "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. - - - Added constructor "TransformingComparator(Transformer)". - - - Added "DualLinkedHashBidiMap" bidi map implementation. - - - Removed unused variables in "TreeBidiMap". - - - The static factory methods have been renamed from "getInstance()" to a camel-case - version of the class name, e.g. "truePredicate()" for class "TruePredicate". - - - "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the - provided index. - - - Added "Equator" interface. - - - Added "PassiveExpiringMap" map decorator. - - - "MultiValueMap" is now serializable. - - - 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. - - - Added method "ListUtils#indexOf(List, Predicate)". - - - Fixed several unit tests which were using parameters to "assertEquals(...)" in wrong order. - - - Return concrete class in static factory methods instead of base class interface - (except for Unmodifiable decorators). - - - "CollectionUtils#size(Collection)" now returns 0 when called with null as input. - - - Removed deprecated classes and methods. - - - "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)" - now correctly return if the map has changed by this operation. - - - Added method "ListOrderedMap#putAll(int, Map)". - - - Added new "Trie" interface with a first concrete implementation "PatriciaTrie" - together with decorators "Unmodifiable" and "Synchronized". - - - "CollectionUtils#addAll(...)" methods now return if the collection has been changed - by this operation. - - - "CompositeCollection", "CompositeMap" and "CompositeSet" are now serializable. - - - "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll". - - - The "CollectionUtils#select(Collection, Predicate, Collection)" method will now - return the output collection. - - - Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now - correctly set the value for the current entry. - - - "MultiKey#toString()" will now use "Arrays#toString(List)". - - - Added support for resettable iterators in "IteratorIterable". - - - Added methods "MapUtils#populateMap(Map, Iterable, Transformer, ...)". - - - "CollectionUtils#forAllDo(Collection, Closure)" now returns the provided closure. - - - Make generic versions of all classes in collections. - - - Added class "ComparatorPredicate". - - - - - 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. - - - "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. - - - Tree traversal with a TreeListIterator will not be affected anymore by - the removal of an element directly after a call to previous(). - - - SetUniqueList.set(int, Object) now works correctly if the object to be inserted - is already placed at the given position. - - - Removed debug output in "MapUtils#getNumber(Map)". - - - Fixed cache assignment for "TreeBidiMap#entrySet". - - - Synchronized access to lock in "StaticBucketMap#size()". - - - "SetUniqueList#subList()#contains(Object)" will now correctly check the subList - rather than the parent list. - - - "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint. - - - "CaseInsensitiveMap" will now convert input strings to lower-case in a - locale-independent manner. - - - "MultiKey" will now be correctly serialized/de-serialized. - - - "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. - - - "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the - provided index. - - - "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)" - now correctly return if the map has changed by this operation. - - - "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll". - - - Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now - correctly set the value for the current entry. - - - - + + + + + Commons Collections Changes + + + + + Unit tests MapUtilsTest and ListIteratorWrapperTest no longer fail on Java 9. + + + Intermittent test failures in Windows for HashSetValuedHashMap. + + + Uncomment test in AbstractMapTest regarding LRUMap equals. + + + Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility. + + + Fix site build on Java 8. + + + Update Javadoc to Build on Java 1.8. + + + Build status, Coverage status and Maven central weren't in README.md + + + Improve efficiency of DefaultedMap.get. + + + Small improvements for generics, conditional statements, and warnings suppressions. + + + Update platform from Java 6 to Java 7. + + + Web site spelling error: MultiValuedMapeList. + + + Correction of javadoc for org.apache.commons.collections4.functors.CatchAndRethrowClosure. + + + Add null-safe MapUtils.size(Map<?, ?>) method. + + + PatriciaTrie prefixMap clear throws NullPointerException. + + + Add class SortedProperties to sort keys. + + + + + 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. + + + Deprecated various method in "CollectionUtils" in favor of similar + methods in the newly introduced "IterableUtils". + + + 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. + + + Added validation when de-serializing a "MultiValueMap#ReflectionFactory": + only Collection classes are allowed, otherwise an UnsupportedOperationException + will be thrown during de-serialization. + + + 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. + + + Subclasses of MultiKey did not re-calculate their hashcode after de-serialization. + + + 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. + + + All constructors and static factory methods will now throw a "NullPointerException" if + a required input argument is null. Previously sometimes a "IllegalArgumentException" was used. + + + Deprecated methods "synchronizedCollection(Collection)" and "unmodifiableCollection(Collection)" + in class "CollectionUtils", the corresponding methods in "java.util.Collections" should be used instead. + + + "IteratorUtils#collate(...)" methods did not use natural ordering when a + null comparator was provided. + + + Added support to specify the initial size of a "LRUMap". + + + Added decorators for "NavigableSet" interface. + + + Added new class "FluentIterable" to support a fluent API for manipulating + Iterable instances. Additionally various supporting methods have been + added to "IterableUtils" and "IteratorUtils". + + + Added new "ZippingIterator" and factory methods "IteratorUtils#zippingIterator(...)". + + + Added new decorator "SkippingIterator" and factory methods "IteratorUtils#skippingIterator(...)". + + + Added method "SetUtils#newIdentityHashSet()" which returns a new identity HashSet + using reference-equality instead of object-equality. + + + Upgraded minimum java requirement to Java 6 (up from Java 5). + + + Added method "LRUMap#get(Object, boolean)" that allows to query the map + without affecting the least recently used order. + + + Changed return type of "ListOrderedSet#remove(int)" from Object to the generic type parameter. + + + Added clarification to javadoc of "TreeBag#add(Object)" wrt null arguments. + + + Added "toString(...)" methods to newly created "IterableUtils" and existing "IteratorUtils" + to get a string representation of an Iterable/Iterator instance similar to "Arrays#toString(...)". + + + Reverted performance improvement for "SetUniqueList#retainAll(Collection)" + introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. + + + Reverted performance improvement for "ListOrderedSet#retainAll(Collection)" + introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. + + + 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. + + + Documented runtime complexity of "CollectionUtils#removeAll(Collection, Collection). + + + "AbstractCollectionDecorator" doesn't forward equals and hashCode anymore. + + + Documented runtime complexity of "CollectionUtils#retainAll(Collection, Collection). + + + "AbstractHashedMap" still inherits from "AbstractMap", contrary to what + the class javadoc stated. The inheritance will now be removed in v5.0. + + + Changed scope of "CircularFifoQueue#isAtFullCapacity()" to public. + + + The map returned by "PatriciaTrie#prefixMap()" did not contain all keys + that are prefixed by the given search key in some rare cases. + + + Added new methods "IterableUtils#partition(...)" to partition an input collection + into separate output collections based on evaluation of one or more predicates. + + + Harmonized signature of factory methods for functor-related classes which take + a collection as input with their array counterparts. + + + Added overloaded method "CollectionUtils#get(Enumeration, int)" and simplified + code for "CollectionUtils#get(Object, int)". + + + Improved check for null input in "MapUtils#putAll(Map, Object[])". + + + Added clarifying javadoc wrt runtime complexity of "CollectionBag#retainAll". + + + Added methods "removeAll(...)" and "retainAll(...)" to "CollectionUtils" that perform + equality checks using the provided "Equator" object instead of "Object#equals()". + + + Use correct type bounds in + "CollectionUtils#isEqualCollection(Collection, Collection, Equator)" to + prevent a "ClassCastException" at runtime for invalid inputs. + + + Removed unneeded private method in "PassiveExpiringMap". + + + Added clarification to the javadoc of "MapUtils#toProperties(Map)" in case + of null keys/values. + + + "ListOrderedSet#listOrderedSet(List)" did not remove duplicates from the + input list as advertised in the javadoc. + + + "MultiKeyMap" was throwing a "NullPointerException" for various operations + if two key arguments have been used and the second was "null". + + + Updated code example for "PredicatedList". + + + "TransformingComparator" and "FixedOrderComparator" did not comply with + the contract of "Object#equals". + + + Fix compilation errors when using source level 1.8 and a recent java 8 compiler. + + + Clarified javadoc of "CollectionBag" wrt changes from the original Bag interface. + + + Removed wrong type bounds for "ComparatorUtils#chainedComparator(...)". + + + 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. + + + Added new transformer "IfTransformer" and factory methods "TransformerUtils#ifTransformer(...)" + which replace "TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)". + + + Added new decorator "BoundedIterator" and factory methods "IteratorUtils#boundedIterator(...)". + + + + + 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(). + + + 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. + + + 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. + + + Refactored the test framework for Bag implementations to extend from + "AbstractCollectionTest" by decorating the concrete Bag instance with + a CollectionBag or CollectionSortedBag. + + + "CollectionBag" will now also respect the contract of the decorated bag in case + a null argument is provided to either removeAll or retainAll. + + + Added bag decorator "CollectionSortedBag" which decorates a SortedBag to make it + comply with the Collection contract. + + + "UnmodifiableBoundedCollection" does now also implement the marker interface "Unmodifiable" + similar as all other unmodifiable decorators. + + + "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. + + + Moved "Equator" interface to base package for consistency. + + + Added "CollectionsUtils#matchesAll(Iterable, Predicate)" to test if all elements + of a collection match a given predicate. + + + Accept wildcard input where possible, e.g. in copy-constructors, Unmodifiable* decorators + and iterators. + + + 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. + + + Narrow return type of "BidiMap#values()" to Set as the values are required to be unique. + + + Fixed conversion of timeout parameters in "PassiveExpiringMap". + + + Exception in "ListOrderedMap#putAll" if map contains null values. + + + Made field "collection" in class "AbstractCollectionDecorator" private and added + setter "setCollection(Collection)" with scope protected to set the decorated collection + during de-serialization. + + + Improved performance of "AbstractMapBag#containsAll(Collection)" by returning immediately + after a difference has been found. + + + Renamed class "TransformedMap" in package "splitmap" to "TransformedSplitMap" to avoid + name clash with similar class in package "map". + + + Added bag decorator "CollectionBag" which decorates a bag to make it comply with the + Collection contract. + + + Replaced "Collection" with "Iterable" for method arguments where applicable. + + + Added "PushbackIterator" decorator to support pushback of elements during iteration. + + + Added "PeekingIterator" decorator to support one-element lookahead during iteration. + + + Added additional clarification to javadoc of interface "Put" wrt return type of + "put(Object, Object)" method. + + + 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()". + + + Removed method "setArray(Object)" in class ArrayIterator and method "setArray(Object[])" + in class ObjectArrayIterator and made fields array, startIndex and endIndex final. + + + Removed unused class "AbstractUntypedCollectionDecorator<E, D>". + + + Added methods "ListUtils#longestCommonSubsequence(...)" to get the longest common subsequence + of arbitrary lists or CharSequences. + + + Changed scope of fields to private where appropriate. + + + An iterator over a "Flat3Map#entrySet()" will now return + independent Map.Entry objects that will not change anymore when + the iterator progresses. + + + Several closure and transformer implementations in the functors package + will now copy an array as input to their constructor (e.g. ChainedClosure). + + + Change base package to org.apache.commons.collections4. + + + The constructors for all Utils classes are now private to prevent instantiation. + + + Added methods "forAllButLastDo(Collection, Closure)" and "forAllButLastDo(Iterator, Closure)" + to class "CollectionUtils". + + + Tree traversal with a TreeListIterator will not be affected anymore by + the removal of an element directly after a call to previous(). + + + Added method "CollectionUtils#isEqualCollection(Collection, Collection, Equator)". + + + 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. + + + SetUniqueList.set(int, E) now works correctly if the object to be inserted + is already placed at the given position. + + + MultiKeyMap.clone() now correctly calls super.clone(). + + + Added "emptyIfNull" methods to classes "CollectionUtils", "ListUtils", "SetUtils" + and "MapUtils". + + + 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. + + + Replaced "Buffer" interface with "java.util.Queue". Kept "CircularFifoQueue" + as well as "Predicated", "Transformed" and "Unmodifiable" decorators. + + + Added method "CollectionUtils#containsAll(Collection, Collection)" with guaranteed + runtime complexity of O(n + m) 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. + + + Fixed performance issue in "SetUniqueList#retainAll" method for large collections. + + + Fixed performance issue in "ListOrderedSet#retainAll" method for large collections. + + + Improved performance of "ListOrderedMap#remove(Object)" method. + + + "CompositeSet" does not inherit from "CompositeCollection" anymore. The inner class + "SetMutator" has been updated accordingly. + + + Added method "CollectionUtils#permutations(Collection)" and class "PermutationIterator" + to generate unordered permutations of a collection. + + + Update javadoc for "ListUtils#lazyList()" and "ListUtils#fixedSizeList()". + + + Added clarifying javadoc wrt runtime complexity of "AbstractDualBidiMap#retainAll". + + + Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#retainAll". + + + Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#removeAll". + + + Fixed several compilation issues with older Java 1.6 compilers. + + + Improved performance of "removeAll()" method for sets returned by "DualHashBidiMap#entrySet()". + + + Improved performance of "CollectionUtils#subtract" methods. + + + Fixed possible "IndexOutOfBoundsException" in "ListOrderedMap#putAll". + + + Improved performance of "SetUniqueList#addAll" method. + + + Improved performance of "ListOrderedSet#addAll" method. + + + Improved performance of "SetUniqueList#removeAll". + + + Improved performance of "ListOrderedSet#remove(Object)" in case the object is + not contained in the Set. + + + Improved performance of "ListUtils#subtract" method. + + + Added "ListUtils#select" and "ListUtils#selectRejected" methods. + + + Added an implementation of Eugene Myers difference algorithm in package + o.a.c.c.sequence. + + + Added missing null check in "CollectionUtils#addIgnoreNull(Collection, Object)". + + + Added new method "get(int)" to "CircularFifoQueue". + + + Added "LazyIteratorChain" iterator. + + + Added "ListUtils#partition" method to split a List into consecutive sublists. + + + Fixed javadoc for "MapUtils#toProperties(Map)". + + + Clarified javadoc for "TransformerUtils#mapTransformer" for null input. + + + Clarified javadoc for "FactoryUtils#prototypeFactory" for null input. + + + Fixed inconsistent javadoc for "MapUtils#synchronizedMap(Map)". + + + Added "CollectionUtils#forAllDo" implementation which takes an "Iterator" as input. + + + Change maven coordinates to "org.apache.commons.commons-collections4". + + + Move the project structure to a standard maven layout. + + + Fixed infinite loop when calling "UnmodifiableBoundedCollection#unmodifiableBoundedCollection()". + + + Fixed javadoc for several methods wrt expected NullPointerExceptions. + + + Added method "ListUtils#defaultIfNull(List, List)". + + + TransformingComparator now supports different types for its input/output values. + + + "DualTreeBidiMap" now uses the correct comparator for the reverse map during de-serialization. + + + "TransformedMap" in the package "splitmap" can now be serialized. + + + "CollectionUtils#filter(Iterable, Predicate)" will now return whether the collection + has been modified. + + + Add method "CollectionUtils#filterInverse(Iterable, Predicate)". + + + "FilterListIterator#hasNext" does not throw a NullPointerException anymore + to comply to the Java iterator specification. + + + "ListUtils#intersection(List, List)" will now also work correctly if there + are duplicate elements in the provided lists. + + + "AbstractCollectionDecorator" will now use internally "decorated()" to access + the decorated collection. + + + Removed features which are now supported by the JDK. + + + Removed debug output in "MapUtils#getNumber(Map)". + + + Fixed javadoc for all "transformedXXX(XXX)" methods in the respective Utils classes + to clarify that existing objects in the list are not transformed. + + + Singleton classes in package "functors" are now correctly de-serialized. + + + "NOPClosure" is now a final class. + + + Removed broken methods "equals(Object)" and "hashCode()" in class "NOPClosure". + + + Simplified exceptions as the cause is available from the parent. + + + Fixed cache assignment for "TreeBidiMap#entrySet". + + + Synchronized access to lock in "StaticBucketMap#size()". + + + Added clarification to javadoc of "ListOrderedMap" that "IdentityMap" and + "CaseInsensitiveMap" are not supported. + + + Improve javadoc of "CollatingIterator" wrt the used "Comparator" and throw a + NullPointerException in "CollatingIterator#least" if no comparator is set. + + + "LRUMap#keySet()#remove(Object)" will not throw a "ConcurrentModificationException" anymore. + + + Improved performance of "ListUtils#intersection(List, List)". + + + Added serialVersionUID fields for "CompositeCollection", "CompositeSet", + "EmptyMapMutator", "EmptySetMutator". + + + Fields transformer and decorated in class "TransformingComparator" are now final. + + + Changed behavior of "CaseInsensitiveMap" constructor to be compliant with "HashMap" + in case the initial capacity is set to zero. + + + Added NodeListIterator and convenience methods in IteratorUtils to iterate over + a org.w3c.dom.NodeList. + + + Improved performance of "StaticBucketMap#putAll(Map)" by iterating over the entry set. + + + Avoid redundant null check in "IteratorUtils#getIterator(Object)". + + + Use a private method to populate the object in "AbstractHashedMap(Map)". + + + Fixed javadoc of "LRUMap" wrt to the maxSize parameter of the constructor. + + + Added new abstract class "CatchAndRethrowClosure" that re-throws any checked exception + as unchecked "FunctorException". + + + Use of final keyword where applicable, minor performance improvements by properly + initializing the capacity of newly created collections when known in advance. + + + "SetUniqueList#subList()" will now return an unmodifiable list as changes to it + may invalidate the parent list. + + + "SetUniqueList#subList()#contains(Object)" will now correctly check the subList + rather than the parent list. + + + Added method "CollectionUtils#subtract(Iterable, Iterable, Predicate)". + + + "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint. + + + Improved javadoc for "Unmodifiable*" classes wrt behavior when the users tries + to modify the collection. + + + Calling "CollectionUtils#sizeIsEmpty(null)" will now return true. + + + Added methods "CollectionUtils#collate(...)" to merge two sorted Collections + into a sorted List using the standard O(n) merge algorithm. + + + "CaseInsensitiveMap" will now convert input strings to lower-case in a + locale-independant manner. + + + Added support for using custom "Equator" objects in "EqualPredicate". + + + Added method "CollatingIterator#getIteratorIndex()". + + + Fixed javadoc for "ListUtils#transformedList(List)" to clarify that existing objects + in the list are not transformed. + + + Added method "CollectionUtils#extractSingleton(Collection)". + + + Added serialization support for "TreeBidiMap". + + + The predicate that rejected an object to be added to a "PredicatedCollection" + is now contained in the respective exception message. + + + Added "IndexedCollection" collection decorator which provides a map-like + view on an existing collection. + + + Added serialization support for "FixedOrderComparator" and "TransformingComparator". + + + "MultiKey" will now be correctly serialized/de-serialized. + + + "TreeBag" will now only accept "Comparable" objects as input when used with natural ordering. + + + Added methods "MapUtils#populateMap(MultiMap, ...)" to support also "MultiMap" instances + as input. + + + Fixed javadoc for methods "firstKey()" and "lastKey()" in class "AbstractLinkedMap". + + + "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. + + + Added constructor "TransformingComparator(Transformer)". + + + Added "DualLinkedHashBidiMap" bidi map implementation. + + + Removed unused variables in "TreeBidiMap". + + + The static factory methods have been renamed from "getInstance()" to a camel-case + version of the class name, e.g. "truePredicate()" for class "TruePredicate". + + + "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the + provided index. + + + Added "Equator" interface. + + + Added "PassiveExpiringMap" map decorator. + + + "MultiValueMap" is now serializable. + + + 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. + + + Added method "ListUtils#indexOf(List, Predicate)". + + + Fixed several unit tests which were using parameters to "assertEquals(...)" in wrong order. + + + Return concrete class in static factory methods instead of base class interface + (except for Unmodifiable decorators). + + + "CollectionUtils#size(Collection)" now returns 0 when called with null as input. + + + Removed deprecated classes and methods. + + + "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)" + now correctly return if the map has changed by this operation. + + + Added method "ListOrderedMap#putAll(int, Map)". + + + Added new "Trie" interface with a first concrete implementation "PatriciaTrie" + together with decorators "Unmodifiable" and "Synchronized". + + + "CollectionUtils#addAll(...)" methods now return if the collection has been changed + by this operation. + + + "CompositeCollection", "CompositeMap" and "CompositeSet" are now serializable. + + + "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll". + + + The "CollectionUtils#select(Collection, Predicate, Collection)" method will now + return the output collection. + + + Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now + correctly set the value for the current entry. + + + "MultiKey#toString()" will now use "Arrays#toString(List)". + + + Added support for resettable iterators in "IteratorIterable". + + + Added methods "MapUtils#populateMap(Map, Iterable, Transformer, ...)". + + + "CollectionUtils#forAllDo(Collection, Closure)" now returns the provided closure. + + + Make generic versions of all classes in collections. + + + Added class "ComparatorPredicate". + + + + + 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. + + + "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. + + + Tree traversal with a TreeListIterator will not be affected anymore by + the removal of an element directly after a call to previous(). + + + SetUniqueList.set(int, Object) now works correctly if the object to be inserted + is already placed at the given position. + + + Removed debug output in "MapUtils#getNumber(Map)". + + + Fixed cache assignment for "TreeBidiMap#entrySet". + + + Synchronized access to lock in "StaticBucketMap#size()". + + + "SetUniqueList#subList()#contains(Object)" will now correctly check the subList + rather than the parent list. + + + "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint. + + + "CaseInsensitiveMap" will now convert input strings to lower-case in a + locale-independent manner. + + + "MultiKey" will now be correctly serialized/de-serialized. + + + "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. + + + "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the + provided index. + + + "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)" + now correctly return if the map has changed by this operation. + + + "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll". + + + Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now + correctly set the value for the current entry. + + + +