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
The following commit(s) were added to refs/heads/master by this push:
new 01f5fdd0a [COLLECTIONS-860] Javadoc CollectionBag.add* to throw
ClassCastException
01f5fdd0a is described below
commit 01f5fdd0a9fa01aacf7a17910e942b9168b1998f
Author: Gary Gregory <[email protected]>
AuthorDate: Fri Oct 18 12:08:53 2024 -0400
[COLLECTIONS-860] Javadoc CollectionBag.add* to throw ClassCastException
---
src/changes/changes.xml | 1 +
.../java/org/apache/commons/collections4/Bag.java | 1 +
.../commons/collections4/bag/CollectionBag.java | 19 ++++++++--------
.../collections4/bag/CollectionBagTest.java | 26 +++++++++++++---------
4 files changed, 27 insertions(+), 20 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d37f3fbcb..dff6b1825 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -37,6 +37,7 @@
<action type="fix" dev="ggregory" due-to="Dávid Szigecsán">Use the Junit
(Jupiter) API #518.</action>
<action type="fix" dev="ggregory" due-to="Gary Gregory, Alex
Herbert">BloomFilterExtractor.flatten() should throw an exception instead of
returning null.</action>
<action type="fix" dev="ggregory" due-to="Gary Gregory, Claude
Warren">Improve WrappedBloomFilterTest. All tests now assert copy() the same
way.</action>
+ <action type="fix" dev="ggregory" due-to="Gary Gregory, Daniele"
issue="COLLECTIONS-860">Javadoc CollectionBag.add* to throw
ClassCastException.</action>
<!-- ADD -->
<action type="add" dev="ggregory" due-to="Gary
Gregory">LayerManager.Builder implements Supplier.</action>
<action type="add" dev="ggregory" due-to="Gary Gregory, hemanth0525">Add
CollectionUtils.duplicateList(Collection).</action>
diff --git a/src/main/java/org/apache/commons/collections4/Bag.java
b/src/main/java/org/apache/commons/collections4/Bag.java
index 186934016..4b1b9d39d 100644
--- a/src/main/java/org/apache/commons/collections4/Bag.java
+++ b/src/main/java/org/apache/commons/collections4/Bag.java
@@ -78,6 +78,7 @@ public interface Bag<E> extends Collection<E> {
* @param object the object to add
* @param nCopies the number of copies to add
* @return {@code true} if the object was not already in the {@code
uniqueSet}
+ * @throws ClassCastException if the class of the specified element
prevents it from being added to this collection
*/
boolean add(E object, int nCopies);
diff --git
a/src/main/java/org/apache/commons/collections4/bag/CollectionBag.java
b/src/main/java/org/apache/commons/collections4/bag/CollectionBag.java
index e5d3f137a..d46f1ac6d 100644
--- a/src/main/java/org/apache/commons/collections4/bag/CollectionBag.java
+++ b/src/main/java/org/apache/commons/collections4/bag/CollectionBag.java
@@ -67,14 +67,14 @@ public final class CollectionBag<E> extends
AbstractBagDecorator<E> {
}
/**
- * <em>(Change)</em>
- * Adds one copy of the specified object to the Bag.
+ * <em>(Change)</em> Adds one copy of the specified object to the Bag.
* <p>
- * Since this method always increases the size of the bag, it
- * will always return {@code true}.
+ * Since this method always increases the size of the bag, it will always
return {@code true}.
+ * </p>
*
- * @param object the object to add
+ * @param object the object to add
* @return {@code true}, always
+ * @throws ClassCastException if the class of the specified element
prevents it from being added to this collection
*/
@Override
public boolean add(final E object) {
@@ -91,6 +91,7 @@ public final class CollectionBag<E> extends
AbstractBagDecorator<E> {
* @param object the object to add
* @param count the number of copies to add
* @return {@code true}, always
+ * @throws ClassCastException if the class of the specified element
prevents it from being added to this collection
*/
@Override
public boolean add(final E object, final int count) {
@@ -98,8 +99,6 @@ public final class CollectionBag<E> extends
AbstractBagDecorator<E> {
return true;
}
- // Collection interface
-
@Override
public boolean addAll(final Collection<? extends E> coll) {
boolean changed = false;
@@ -145,6 +144,7 @@ public final class CollectionBag<E> extends
AbstractBagDecorator<E> {
* <p>
* This will also remove the object from the {@link #uniqueSet()} if the
* bag contains no occurrence anymore of the object after this operation.
+ * </p>
*
* @param object the object to remove
* @return {@code true} if this call changed the collection
@@ -190,6 +190,7 @@ public final class CollectionBag<E> extends
AbstractBagDecorator<E> {
* If it's not contained, it's removed from this bag. As a consequence,
* it is advised to use a collection type for {@code coll} that provides
* a fast (e.g. O(1)) implementation of {@link
Collection#contains(Object)}.
+ * </p>
*
* @param coll the collection to retain
* @return {@code true} if this call changed the collection
@@ -211,10 +212,8 @@ public final class CollectionBag<E> extends
AbstractBagDecorator<E> {
return decorated().retainAll(null);
}
- // Bag interface
-
/**
- * Write the collection out using a custom routine.
+ * Writes the collection out using a custom routine.
*
* @param out the output stream
* @throws IOException if an error occurs while writing to the stream
diff --git
a/src/test/java/org/apache/commons/collections4/bag/CollectionBagTest.java
b/src/test/java/org/apache/commons/collections4/bag/CollectionBagTest.java
index 6c3022291..40d2ef889 100644
--- a/src/test/java/org/apache/commons/collections4/bag/CollectionBagTest.java
+++ b/src/test/java/org/apache/commons/collections4/bag/CollectionBagTest.java
@@ -18,18 +18,19 @@ package org.apache.commons.collections4.bag;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Comparator;
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.collection.AbstractCollectionTest;
import org.apache.commons.collections4.functors.NonePredicate;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
/**
@@ -40,15 +41,6 @@ import org.junit.jupiter.api.Test;
*/
public class CollectionBagTest<T> extends AbstractCollectionTest<T> {
- @Test
- @Disabled
- public void testAdd_Always() throws Throwable {
- TreeBag<Predicate<Object>> treeBagOfPredicateOfObject = new
TreeBag<>();
- CollectionBag<Predicate<Object>> collectionBagOfPredicateOfObject =
new CollectionBag<>(treeBagOfPredicateOfObject);
- Predicate<Object> predicate0 =
NonePredicate.nonePredicate(collectionBagOfPredicateOfObject);
- collectionBagOfPredicateOfObject.add(predicate0, 24);
- }
-
/**
* JUnit constructor.
*/
@@ -93,6 +85,20 @@ public class CollectionBagTest<T> extends
AbstractCollectionTest<T> {
return CollectionBag.collectionBag(new HashBag<>());
}
+ @Test
+ public void testAdd_Predicate_ComparatorCustom() throws Throwable {
+ final TreeBag<Predicate<Object>> treeBagOfPredicateOfObject = new
TreeBag<>(Comparator.comparing(Predicate::toString));
+ final CollectionBag<Predicate<Object>>
collectionBagOfPredicateOfObject = new
CollectionBag<>(treeBagOfPredicateOfObject);
+
collectionBagOfPredicateOfObject.add(NonePredicate.nonePredicate(collectionBagOfPredicateOfObject),
24);
+ }
+
+ @Test
+ public void testAdd_Predicate_ComparatorDefault() throws Throwable {
+ final TreeBag<Predicate<Object>> treeBagOfPredicateOfObject = new
TreeBag<>();
+ final CollectionBag<Predicate<Object>>
collectionBagOfPredicateOfObject = new
CollectionBag<>(treeBagOfPredicateOfObject);
+ assertThrows(ClassCastException.class, () ->
collectionBagOfPredicateOfObject.add(NonePredicate.nonePredicate(collectionBagOfPredicateOfObject),
24));
+ }
+
// public void testCreate() throws Exception {
// resetEmpty();
// writeExternalFormToDisk((java.io.Serializable) getCollection(),
"src/test/resources/data/test/CollectionBag.emptyCollection.version4.obj");