This is an automated email from the ASF dual-hosted git repository.
garydgregory 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 5974e618e TransformIterator now fail-fast on a null Iterator. (#686)
5974e618e is described below
commit 5974e618e61e5abe7ead57488c76c741c2e3e5f7
Author: Gary Gregory <[email protected]>
AuthorDate: Fri Jun 19 10:29:29 2026 -0400
TransformIterator now fail-fast on a null Iterator. (#686)
---
.../collections4/iterators/TransformIterator.java | 51 ++++++++++------------
.../iterators/TransformIteratorTest.java | 15 +++++--
2 files changed, 34 insertions(+), 32 deletions(-)
diff --git
a/src/main/java/org/apache/commons/collections4/iterators/TransformIterator.java
b/src/main/java/org/apache/commons/collections4/iterators/TransformIterator.java
index ed7f1e1d4..d76f81f8c 100644
---
a/src/main/java/org/apache/commons/collections4/iterators/TransformIterator.java
+++
b/src/main/java/org/apache/commons/collections4/iterators/TransformIterator.java
@@ -14,9 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.commons.collections4.iterators;
import java.util.Iterator;
+import java.util.Objects;
import org.apache.commons.collections4.Transformer;
@@ -31,39 +33,34 @@ public class TransformIterator<I, O> implements Iterator<O>
{
/** The iterator being used */
private Iterator<? extends I> iterator;
-
/** The transformer being used */
private Transformer<? super I, ? extends O> transformer;
/**
- * Constructs a new {@code TransformIterator} that will not function
- * until the {@link #setIterator(Iterator) setIterator} and
+ * Constructs a new {@code TransformIterator} that will not function until
the {@link #setIterator(Iterator) setIterator} and
* {@link #setTransformer(Transformer)} methods are invoked.
*/
public TransformIterator() {
}
/**
- * Constructs a new {@code TransformIterator} that won't transform
- * elements from the given iterator.
+ * Constructs a new {@code TransformIterator} that won't transform
elements from the given iterator.
*
- * @param iterator the iterator to use
+ * @param iterator the iterator to use.
*/
public TransformIterator(final Iterator<? extends I> iterator) {
- this.iterator = iterator;
+ this(iterator, null);
}
/**
- * Constructs a new {@code TransformIterator} that will use the
- * given iterator and transformer. If the given transformer is null,
- * then objects will not be transformed.
+ * Constructs a new {@code TransformIterator} that will use the given
iterator and transformer. If the given transformer is null, then objects will
not be
+ * transformed.
*
- * @param iterator the iterator to use
- * @param transformer the transformer to use, may be null to pass
elements through unchanged
+ * @param iterator the iterator to use, may not be null.
+ * @param transformer the transformer to use, may be null to pass elements
through unchanged
*/
- public TransformIterator(final Iterator<? extends I> iterator,
- final Transformer<? super I, ? extends O>
transformer) {
- this.iterator = iterator;
+ public TransformIterator(final Iterator<? extends I> iterator, final
Transformer<? super I, ? extends O> transformer) {
+ this.iterator = Objects.requireNonNull(iterator);
this.transformer = transformer;
}
@@ -91,12 +88,11 @@ public class TransformIterator<I, O> implements Iterator<O>
{
}
/**
- * Gets the next object from the iteration, transforming it using the
- * current transformer. If the transformer is null, no transformation
- * occurs and the object from the iterator is returned directly.
+ * Gets the next object from the iteration, transforming it using the
current transformer. If the transformer is null, no transformation occurs and
the
+ * object from the iterator is returned directly.
*
- * @return the next object
- * @throws java.util.NoSuchElementException if there are no more elements
+ * @return the next object.
+ * @throws java.util.NoSuchElementException if there are no more elements.
*/
@Override
public O next() {
@@ -109,30 +105,27 @@ public class TransformIterator<I, O> implements
Iterator<O> {
}
/**
- * Sets the iterator for this iterator to use.
- * If iteration has started, this effectively resets the iterator.
+ * Sets the iterator for this iterator to use. If iteration has started,
this effectively resets the iterator.
*
- * @param iterator the iterator to use.
+ * @param iterator the iterator to use.
*/
public void setIterator(final Iterator<? extends I> iterator) {
this.iterator = iterator;
}
/**
- * Sets the transformer this the iterator to use.
- * A null transformer is a no-op transformer.
+ * Sets the transformer this the iterator to use. A null transformer is a
no-op transformer.
*
- * @param transformer the transformer to use, may be null to pass
elements through unchanged.
+ * @param transformer the transformer to use, may be null to pass elements
through unchanged.
*/
public void setTransformer(final Transformer<? super I, ? extends O>
transformer) {
this.transformer = transformer;
}
/**
- * Transforms the given object using the transformer.
- * If the transformer is null, the original object is returned as-is.
+ * Transforms the given object using the transformer. If the transformer
is null, the original object is returned as-is.
*
- * @param source the object to transform, may be null.
+ * @param source the object to transform, may be null.
* @return the transformed object, the original object the transformer is
null.
*/
@SuppressWarnings("unchecked")
diff --git
a/src/test/java/org/apache/commons/collections4/iterators/TransformIteratorTest.java
b/src/test/java/org/apache/commons/collections4/iterators/TransformIteratorTest.java
index 8e6a18e8b..c14df25a2 100644
---
a/src/test/java/org/apache/commons/collections4/iterators/TransformIteratorTest.java
+++
b/src/test/java/org/apache/commons/collections4/iterators/TransformIteratorTest.java
@@ -14,32 +14,41 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.commons.collections4.iterators;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
+/**
+ * Tests {@link TransformIterator}.
+ */
class TransformIteratorTest {
+ @Test
+ void testConstructorInvariant() {
+ assertThrows(NullPointerException.class, () -> new
TransformIterator<>(null));
+ assertThrows(NullPointerException.class, () -> new
TransformIterator<>(null, null));
+ }
+
/**
* Tests <a
href="https://issues.apache.org/jira/browse/COLLECTIONS-890">COLLECTIONS-890</a>.
*/
@Test
void testNullTransformerActsAsPassThrough() {
final TransformIterator<Integer, Integer> iterator = new
TransformIterator<>(Arrays.asList(1, 2).iterator(), null);
-
assertEquals(Integer.valueOf(1), iterator.next());
assertEquals(Integer.valueOf(2), iterator.next());
}
@Test
void testSetNullTransformerActsAsPassThrough() {
- final TransformIterator<Integer, Integer> iterator = new
TransformIterator<>(Arrays.asList(1, 2).iterator(), i -> i + 1);
+ final TransformIterator<Integer, Integer> iterator = new
TransformIterator<>(Arrays.asList(1, 2).iterator(), null);
iterator.setTransformer(null);
-
assertEquals(Integer.valueOf(1), iterator.next());
assertEquals(Integer.valueOf(2), iterator.next());
}