- In Bag.java, the statement "If the bag contains less than i occurences,
the item item will be removed from the unique set" implies that if the bag
contains 5 occurences and i is 5, (5 is not less than 5) then the item will
not be removed from the unique set, even though there should be no more
occurances in the bag.
- In AbstractBag.java, the documentation does not specify exactly what a
subcless needs to do to extend AbstractBag to make a concrete subclass.
- AbstractBag.add(Object,int) has two calls to getCount(o), when only one
is necessary. This wastes a few cycles to perform method invocations, a
map lookup, a cast, and a few comparisons.
- The AbstractBag.equals(Object) method will incorrectly throw a
NullPointerException if a null value is passed. The Object.equals(Object)
API specifies "For any non-null reference value x, x.equals(null) should
return false".
- The AbstractBag.equals(Object) method will only work if the object
passed in extends AbstractMap or implements Map. Neither of these facts
is documented, and neither is correct. The contract for
Object.equals(Object) states: "for any reference values x and y,
x.equals(y) should return true if and only if y.equals(x) returns true. ".
Returning true when the argument is a Map is incorrect since he reverse
(the map checking to see if its equal to the bag) will most certainly be
false. The same can be said for AbstractMap. A subclass of AbstractMap
may add extra data to be stored within the Bag that must also be compared
for them to be equal. The reverse comparison (specialized subclass equals
basic abstract bap) will fail. You can read more about this in a three-
year old, but still valid java world article:
http://www.javaworld.com/javaworld/jw-01-1999/jw-01-object.html
- if AbstractBag.remove(Object,int) is called passing in 0 as the number
to remove and specifying an object that exists in the bag, true will be
returned from the method. Per the Bag API specification, true should only
return when an object is actually removed. Since no objects are removed,
false should be returned instead. Additionally, if a negative number is
specified, not only is the object not removed, but object(s) are *added*
(well, in the sense that it is equivalent of calling add(o, -i))
- the uniqueSet() method returns the set of unique objects, however the
set is modifiable. If the underlying map implementation has the set
backed by the map (as per the map contract -- so it should), then elements
can be removed from the unique set and have them removed from the
underlying map as well. This causes consistency problems with the Bag
since _total will then be incorrect.
- in extractList(), getCount(current) is called each time through the
inner loop, adding lots of extra overhead. Reversing the loop (starting
at the count and going down to 0) eliminates the excess overhead.
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@130557 13f79535-47bb-0310-9956-ffa450edef68
it when the unit test source is 50% longer than the class being tested :-).
The only change I made was to use the long-form version of the Apache
license -- according to the Apache board, that is the only acceptable
approach at the moment. Any remaining classes in commons-collections (or
elsewhere) using the short form license should be updated.
Submitted by: Marc Johnson <marc_johnson27591@hotmail.com>
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@130509 13f79535-47bb-0310-9956-ffa450edef68
called in the standard way. ie)
(cf: "Juozas Baliuka" <baliuka@mwm.lt>)
while(true) {
filterIterator.next();
}
This should eventually throw NoSuchElementException, but it returns null
forever.
Submitted by: Jan Sorensen <jan.sorensen@aragost.com>
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@130505 13f79535-47bb-0310-9956-ffa450edef68
where ExtendedProperties would re-process data when making a subset. Hope no one
was depending on that :)
Also adjusted the testcase to test this.
PR:
Obtained from:
Submitted by:
Reviewed by:
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@130474 13f79535-47bb-0310-9956-ffa450edef68
1) replaced with the current version from velocity's CVS - this is a few
changes by dan
2) added the recent patch from Ilkka for dealing with encoded properties
PR:
Obtained from:
Submitted by:
Reviewed by:
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@130456 13f79535-47bb-0310-9956-ffa450edef68
HashMap, and TreeMap respectively. This improves the ability to
substitute "fast" versions for the use of the regular collection classes.
Implement clone(), equals(), and hashCode() methods in accordance with the
contracts specified in the Collections classes APIs.
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@130444 13f79535-47bb-0310-9956-ffa450edef68