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 caa771abc BloomFilterExtractor.flatten() should throw an exception 
instead of returning null
caa771abc is described below

commit caa771abcd5e0e6b4278c8c606747866a1c76b05
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Sat Oct 5 15:41:43 2024 -0400

    BloomFilterExtractor.flatten() should throw an exception instead of
    returning null
---
 src/changes/changes.xml                                    |  1 +
 .../collections4/bloomfilter/BloomFilterExtractor.java     | 14 ++++++++------
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 06d3b2ef8..4fa56010a 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -35,6 +35,7 @@
     <action type="fix" dev="ggregory" due-to="Gary Gregory">[Functional] 
FunctorUtils.validate(Transformer...) is now 
FunctorUtils.validate(Function...).</action>
     <action type="fix" dev="ggregory" due-to="Dávid Szigecsán. Gary 
Gregory">Increase test coverage for ListUtils #517.</action>
     <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>
     <!-- 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/bloomfilter/BloomFilterExtractor.java
 
b/src/main/java/org/apache/commons/collections4/bloomfilter/BloomFilterExtractor.java
index aa11c8584..004c2e38f 100644
--- 
a/src/main/java/org/apache/commons/collections4/bloomfilter/BloomFilterExtractor.java
+++ 
b/src/main/java/org/apache/commons/collections4/bloomfilter/BloomFilterExtractor.java
@@ -19,6 +19,7 @@ package org.apache.commons.collections4.bloomfilter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiPredicate;
 import java.util.function.Predicate;
 
@@ -97,17 +98,18 @@ public interface BloomFilterExtractor {
      * Create a standard (non-layered) Bloom filter by merging all of the 
layers. If
      * the filter is empty this method will return an empty Bloom filter.
      *
-     * @return the merged bloom filter.
+     * @return the merged bloom filter, never null.
+     * @throws NullPointerException if this call did not process any filters.
      */
     default BloomFilter flatten() {
-        final BloomFilter[] bf = { null };
+        final AtomicReference<BloomFilter> ref = new AtomicReference<>();
         processBloomFilters(x -> {
-            if (bf[0] == null) {
-                bf[0] = new SimpleBloomFilter(x.getShape());
+            if (ref.get() == null) {
+                ref.set(new SimpleBloomFilter(x.getShape()));
             }
-            return bf[0].merge(x);
+            return ref.get().merge(x);
         });
-        return bf[0];
+        return Objects.requireNonNull(ref.get(), "No filters.");
     }
 
     /**

Reply via email to