This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 6f65c2bacd120b81235735611fb0480383e9670e
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Sat Sep 23 14:00:05 2023 +0200

    Remove the boolean return value in WritableFeatureSet.removeIf(Predicate)
    
    https://issues.apache.org/jira/browse/SIS-560
---
 .../org/apache/sis/storage/gpx/WritableStore.java  |  7 ++++---
 .../sis/storage/xml/stream/RewriteOnUpdate.java    | 22 +++++-----------------
 .../org/apache/sis/storage/gpx/UpdaterTest.java    |  4 +---
 .../org/apache/sis/storage/WritableFeatureSet.java | 14 ++------------
 4 files changed, 12 insertions(+), 35 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java
 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java
index a04fc2742e..2fd3599554 100644
--- 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java
+++ 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java
@@ -40,7 +40,7 @@ import org.opengis.feature.FeatureType;
  *
  * @author  Johann Sorel (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
  * @since   1.3
  */
 public final class WritableStore extends Store implements WritableFeatureSet {
@@ -95,9 +95,10 @@ public final class WritableStore extends Store implements 
WritableFeatureSet {
      * @throws DataStoreException if the feature stream cannot be obtained or 
updated.
      */
     @Override
-    public synchronized boolean removeIf(final Predicate<? super Feature> 
filter) throws DataStoreException {
+    public synchronized void removeIf(final Predicate<? super Feature> filter) 
throws DataStoreException {
         try (Updater updater = updater()) {
-            return updater.removeIf(filter);
+            updater.removeIf(filter);
+            updater.flush();
         }
     }
 
diff --git 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java
 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java
index cf1e77ac84..60ba5e50a4 100644
--- 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java
+++ 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java
@@ -161,29 +161,17 @@ public abstract class RewriteOnUpdate implements 
AutoCloseable {
      * Removes all feature instances from the {@code FeatureSet} which matches 
the given predicate.
      *
      * @param  filter  a predicate which returns {@code true} for feature 
instances to be removed.
-     * @return {@code true} if any elements were removed.
      * @throws DataStoreException if the feature stream cannot be obtained or 
updated.
      */
-    public boolean removeIf(final Predicate<? super Feature> filter) throws 
DataStoreException {
+    public void removeIf(final Predicate<? super Feature> filter) throws 
DataStoreException {
         ArgumentChecks.ensureNonNull("filter", filter);
-        if (isEmpty()) {
-            return false;
+        if (!isEmpty()) {
+            filtered = filtered().filter((feature) -> {
+                return !filter.test(feature);
+            });
         }
-        filtered = filtered().filter((feature) -> {
-            boolean r = filter.test(feature);
-            if (r) modified = true;
-            return !r;
-        });
-        modified = false;
-        flush();            // Need immediate execution for getting the 
boolean value.
-        return modified;
     }
 
-    /**
-     * A flag telling whether {@link #removeIf(Predicate)} removed at least 
one feature.
-     */
-    private boolean modified;
-
     /**
      * Updates all feature instances from the {@code FeatureSet} which match 
the given predicate.
      * If the given operator returns {@code null}, then the filtered feature 
is removed.
diff --git 
a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java
 
b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java
index 7d7f9c4ff1..d15c85c75a 100644
--- 
a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java
+++ 
b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java
@@ -165,14 +165,12 @@ public final class UpdaterTest extends TestCase {
             Files.copy(in, file, StandardCopyOption.REPLACE_EXISTING);
         }
         assertTrue(containsLat20());
-        final boolean result;
         try (final WritableStore store = create()) {
-            result = store.removeIf((feature) -> {
+            store.removeIf((feature) -> {
                 Object point = feature.getPropertyValue("sis:geometry");
                 return ((Point) point).getY() == 20;
             });
         }
-        assertTrue(result);
         assertFalse(containsLat20());
     }
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java
index c6641cc256..14820d87da 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java
@@ -32,7 +32,7 @@ import org.opengis.feature.FeatureType;
  * or {@linkplain #replaceIf(Predicate, UnaryOperator) replace} feature 
instances.
  *
  * @author  Johann Sorel (Geomatys)
- * @version 1.0
+ * @version 1.4
  * @since   1.0
  */
 public interface WritableFeatureSet extends FeatureSet {
@@ -80,21 +80,11 @@ public interface WritableFeatureSet extends FeatureSet {
     /**
      * Removes all feature instances from this {@code FeatureSet} which 
matches the given predicate.
      *
-     * <div class="warning"><b>Possible API change:</b>
-     * The {@code boolean} return type may be removed in a future version.
-     * It currently exists for compatibility with the {@link 
java.util.Collection#removeIf(Predicate)} method
-     * if an implementation chooses to implements {@code WritableFeatureSet} 
and {@link java.util.Collection}
-     * in same time. But this is not recommended, and the current method 
signature is a blocker for deferred
-     * method execution. Telling if there is any feature to remove requires 
immediate execution of the filter,
-     * while an implementation may want to wait in case the filtering can be 
combined with other operations
-     * such as {@code add(…)} or {@code replaceIf(…)}.
-     * See <a href="https://issues.apache.org/jira/browse/SIS-560";>SIS-560 on 
issue tracker</a>.</div>
-     *
      * @param  filter  a predicate which returns {@code true} for feature 
instances to be removed.
      * @return {@code true} if any elements were removed.
      * @throws DataStoreException if an error occurred while removing features.
      */
-    boolean removeIf(Predicate<? super Feature> filter) throws 
DataStoreException;
+    void removeIf(Predicate<? super Feature> filter) throws DataStoreException;
 
     /**
      * Updates all feature instances from this {@code FeatureSet} which match 
the given predicate.

Reply via email to