You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/02/09 22:41:24 UTC
[commons-collections] 02/02: [COLLECTIONS-710] Calling
CompositeCollection.size() will cash if the list contains null element.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-collections.git
commit b97da105fbccac149223327e49d29ac9024913fb
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Feb 9 17:41:20 2019 -0500
[COLLECTIONS-710] Calling CompositeCollection.size() will cash if the
list contains null element.
---
.../collection/CompositeCollection.java | 30 +++++++++++++++-----
.../collection/CompositeCollectionTest.java | 33 ++++++++++++++++++++++
2 files changed, 56 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/apache/commons/collections4/collection/CompositeCollection.java b/src/main/java/org/apache/commons/collections4/collection/CompositeCollection.java
index 83b4302..57541dc 100644
--- a/src/main/java/org/apache/commons/collections4/collection/CompositeCollection.java
+++ b/src/main/java/org/apache/commons/collections4/collection/CompositeCollection.java
@@ -24,6 +24,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.iterators.EmptyIterator;
import org.apache.commons.collections4.iterators.IteratorChain;
import org.apache.commons.collections4.list.UnmodifiableList;
@@ -260,6 +261,9 @@ public class CompositeCollection<E> implements Collection<E>, Serializable {
*/
@Override
public boolean containsAll(final Collection<?> coll) {
+ if (coll == null) {
+ return false;
+ }
for (final Object item : coll) {
if (contains(item) == false) {
return false;
@@ -300,7 +304,7 @@ public class CompositeCollection<E> implements Collection<E>, Serializable {
*/
@Override
public boolean removeAll(final Collection<?> coll) {
- if (coll.size() == 0) {
+ if (CollectionUtils.isEmpty(coll)) {
return false;
}
boolean changed = false;
@@ -323,8 +327,10 @@ public class CompositeCollection<E> implements Collection<E>, Serializable {
@Override
public boolean retainAll(final Collection<?> coll) {
boolean changed = false;
- for (final Collection<E> item : all) {
- changed |= item.retainAll(coll);
+ if (coll != null) {
+ for (final Collection<E> item : all) {
+ changed |= item.retainAll(coll);
+ }
}
return changed;
}
@@ -359,7 +365,9 @@ public class CompositeCollection<E> implements Collection<E>, Serializable {
* @param compositeCollection the Collection to be appended to the composite
*/
public void addComposited(final Collection<E> compositeCollection) {
- all.add(compositeCollection);
+ if (compositeCollection != null) {
+ all.add(compositeCollection);
+ }
}
/**
@@ -370,8 +378,12 @@ public class CompositeCollection<E> implements Collection<E>, Serializable {
*/
public void addComposited(final Collection<E> compositeCollection1,
final Collection<E> compositeCollection2) {
- all.add(compositeCollection1);
- all.add(compositeCollection2);
+ if (compositeCollection1 != null) {
+ all.add(compositeCollection1);
+ }
+ if (compositeCollection2 != null) {
+ all.add(compositeCollection2);
+ }
}
/**
@@ -380,7 +392,11 @@ public class CompositeCollection<E> implements Collection<E>, Serializable {
* @param compositeCollections the Collections to be appended to the composite
*/
public void addComposited(final Collection<E>... compositeCollections) {
- all.addAll(Arrays.asList(compositeCollections));
+ for (Collection<E> compositeCollection : compositeCollections) {
+ if (compositeCollection != null) {
+ all.add(compositeCollection);
+ }
+ }
}
/**
diff --git a/src/test/java/org/apache/commons/collections4/collection/CompositeCollectionTest.java b/src/test/java/org/apache/commons/collections4/collection/CompositeCollectionTest.java
index b3b625f..8cdc920 100644
--- a/src/test/java/org/apache/commons/collections4/collection/CompositeCollectionTest.java
+++ b/src/test/java/org/apache/commons/collections4/collection/CompositeCollectionTest.java
@@ -23,6 +23,8 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import org.junit.Assert;
+
/**
* Extension of {@link AbstractCollectionTest} for exercising the
* {@link CompositeCollection} implementation.
@@ -246,8 +248,30 @@ public class CompositeCollectionTest<E> extends AbstractCollectionTest<E> {
two.add((E) "1");
c.addComposited(one);
assertTrue(c.containsAll(two));
+ assertFalse(c.containsAll(null));
}
+ public void testAddNullList() {
+ ArrayList<String> nullList = null;
+ CompositeCollection<String> cc = new CompositeCollection<>();
+ cc.addComposited(nullList);
+ Assert.assertEquals(0, cc.size());
+ }
+
+ public void testAddNullLists2Args() {
+ ArrayList<String> nullList = null;
+ CompositeCollection<String> cc = new CompositeCollection<>();
+ cc.addComposited(nullList, nullList);
+ Assert.assertEquals(0, cc.size());
+ }
+
+ public void testAddNullListsVarArgs() {
+ ArrayList<String> nullList = null;
+ CompositeCollection<String> cc = new CompositeCollection<>();
+ cc.addComposited(nullList, nullList, nullList);
+ Assert.assertEquals(0, cc.size());
+ }
+
@SuppressWarnings("unchecked")
public void testIsEmpty() {
setUpTest();
@@ -315,6 +339,10 @@ public class CompositeCollectionTest<E> extends AbstractCollectionTest<E> {
assertTrue(!c.contains("1"));
assertTrue(!one.contains("1"));
assertTrue(!two.contains("1"));
+ c.removeAll(null);
+ assertTrue(!c.contains("1"));
+ assertTrue(!one.contains("1"));
+ assertTrue(!two.contains("1"));
}
@SuppressWarnings("unchecked")
@@ -341,6 +369,11 @@ public class CompositeCollectionTest<E> extends AbstractCollectionTest<E> {
assertTrue(!one.contains("2"));
assertTrue(c.contains("1"));
assertTrue(one.contains("1"));
+ c.retainAll(null);
+ assertTrue(!c.contains("2"));
+ assertTrue(!one.contains("2"));
+ assertTrue(c.contains("1"));
+ assertTrue(one.contains("1"));
}
@SuppressWarnings("unchecked")