You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2021/09/13 15:04:38 UTC

[sis] branch geoapi-4.0 updated: Post-merge cleanup.

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


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new 6ef97a5  Post-merge cleanup.
6ef97a5 is described below

commit 6ef97a5fd7a5f0512f8c1487c351ad6a9f1b7f8a
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Mon Sep 13 17:04:01 2021 +0200

    Post-merge cleanup.
---
 .../sis/coverage/grid/BufferedGridCoverage.java    |  4 +---
 .../org/apache/sis/filter/ComparisonFilter.java    |  4 ++--
 .../apache/sis/filter/DefaultFilterFactory.java    | 18 ++++++++++++++----
 .../org/apache/sis/filter/IdentifierFilter.java    |  2 +-
 .../sis/internal/feature/AttributeConvention.java  |  2 +-
 .../java/org/apache/sis/filter/PeriodLiteral.java  |  2 --
 .../main/java/org/apache/sis/portrayal/Canvas.java | 19 +++++++++----------
 .../org/apache/sis/portrayal/package-info.java     |  2 +-
 .../org/apache/sis/geometry/AbstractEnvelope.java  |  2 +-
 ide-project/NetBeans/nbproject/build-impl.xml      | 22 ++++++----------------
 ide-project/NetBeans/nbproject/genfiles.properties |  6 +++---
 ide-project/NetBeans/nbproject/project.properties  |  1 -
 ide-project/NetBeans/nbproject/project.xml         |  1 -
 .../sis/internal/sql/feature/SelectionClause.java  |  2 +-
 .../sql/feature/SelectionClauseWriter.java         | 10 +++-------
 .../internal/sql/postgis/ExtendedClauseWriter.java |  4 +---
 .../sis/internal/storage/JoinFeatureSet.java       |  2 +-
 17 files changed, 45 insertions(+), 58 deletions(-)

diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java
index 4aa3ae4..996463d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java
@@ -282,10 +282,8 @@ public class BufferedGridCoverage extends GridCoverage {
                         if (isNullIfOutside()) {
                             return null;
                         }
-                        final PointOutsideCoverageException ex = new PointOutsideCoverageException(
+                        throw new PointOutsideCoverageException(
                                 gc.pointOutsideCoverage(getCoverage().gridGeometry.extent), point);
-                        ex.setOffendingLocation(point);
-                        throw ex;
                     }
                     /*
                      * Following should never overflow, otherwise BufferedGridCoverage
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java
index b6a8f0a..b8c1a05 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java
@@ -103,8 +103,8 @@ abstract class ComparisonFilter<R> extends BinaryFunction<R,Object,Object>
      * @param  matchAction     specifies how the comparisons shall be evaluated for a collection of values.
      */
     ComparisonFilter(final Expression<? super R, ?> expression1,
-                       final Expression<? super R, ?> expression2,
-                       final boolean isMatchingCase, final MatchAction matchAction)
+                     final Expression<? super R, ?> expression2,
+                     final boolean isMatchingCase, final MatchAction matchAction)
     {
         super(expression1, expression2);
         this.isMatchingCase = isMatchingCase;
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultFilterFactory.java b/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultFilterFactory.java
index f028cb8..b228bd8 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultFilterFactory.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/DefaultFilterFactory.java
@@ -180,6 +180,18 @@ public abstract class DefaultFilterFactory<R,G,T> extends AbstractFactory implem
 
         /**
          * Creates a new predicate to identify an identifiable resource within a filter expression.
+         * The predicate uses no versioning and no time range.
+         *
+         * @param  identifier  identifier of the resource that shall be selected by the predicate.
+         * @return the predicate.
+         */
+        @Override
+        public ResourceId<Feature> resourceId(final String identifier) {
+            return new IdentifierFilter<>(identifier);
+        }
+
+        /**
+         * Creates a new predicate to identify an identifiable resource within a filter expression.
          * If {@code startTime} and {@code endTime} are non-null, the filter will select all versions
          * of a resource between the specified dates.
          *
@@ -527,8 +539,6 @@ public abstract class DefaultFilterFactory<R,G,T> extends AbstractFactory implem
      * @return a filter for the "Equals" operation between the two geometries.
      *
      * @see SpatialOperatorName#EQUALS
-     *
-     * @todo Rename {@code equal}.
      */
     @Override
     public BinarySpatialOperator<R> equals(final Expression<? super R, ? extends G> geometry1,
@@ -645,8 +655,8 @@ public abstract class DefaultFilterFactory<R,G,T> extends AbstractFactory implem
      * @see SpatialOperatorName#OVERLAPS
      */
     @Override
-    public BinarySpatialOperator<R>  overlaps(final Expression<? super R, ? extends G> geometry1,
-                                              final Expression<? super R, ? extends G> geometry2)
+    public BinarySpatialOperator<R> overlaps(final Expression<? super R, ? extends G> geometry1,
+                                             final Expression<? super R, ? extends G> geometry2)
     {
         return new BinarySpatialFilter<>(SpatialOperatorName.OVERLAPS, library, geometry1, geometry2);
     }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java
index 74b4c65..2a1b8b5 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java
@@ -36,7 +36,7 @@ import org.opengis.filter.ResourceId;
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.1
  *
- * @param  <R>  the type of resources (e.g. {@link org.opengis.feature.Feature}) used as inputs.
+ * @param  <R>  the type of resources used as inputs.
  *
  * @since 1.1
  * @module
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
index 19bb291..47a6267 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
@@ -347,7 +347,7 @@ public final class AttributeConvention extends Static {
      * @return {@code true} if a characteristic for maximal length has been found.
      */
     public static boolean characterizedByMaximalLength(final IdentifiedType type) {
-        return hasCharacteristic(type, MAXIMAL_LENGTH_CHARACTERISTIC.toString(), Integer.class);
+        return hasCharacteristic(type, MAXIMAL_LENGTH, Integer.class);
     }
 
     /**
diff --git a/core/sis-feature/src/test/java/org/apache/sis/filter/PeriodLiteral.java b/core/sis-feature/src/test/java/org/apache/sis/filter/PeriodLiteral.java
index ab10b06..31cd4f6 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/filter/PeriodLiteral.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/filter/PeriodLiteral.java
@@ -18,7 +18,6 @@ package org.apache.sis.filter;
 
 import java.util.Date;
 import java.io.Serializable;
-import org.opengis.util.ScopedName;
 import org.opengis.metadata.Identifier;
 import org.apache.sis.test.TestUtilities;
 
@@ -76,7 +75,6 @@ final strictfp class PeriodLiteral implements Period, Literal<Feature,Period>, S
 
     /** Not needed for the tests. */
     @Override public Identifier       getName()                              {throw new UnsupportedOperationException();}
-    @Override public ScopedName       getFunctionName()                      {throw new UnsupportedOperationException();}
     @Override public RelativePosition relativePosition(TemporalPrimitive o)  {throw new UnsupportedOperationException();}
     @Override public Duration         distance(TemporalGeometricPrimitive o) {throw new UnsupportedOperationException();}
     @Override public Duration         length()                               {throw new UnsupportedOperationException();}
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
index 6a1a144..d268eed 100644
--- a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
@@ -63,17 +63,16 @@ import org.apache.sis.coverage.grid.GridExtent;
 
 /**
  * Common abstraction for implementations that manage the display and user manipulation
- * of {@link MapLayer} instances. This base class makes no assumption about the geometry
- * of the display device (e.g. flat video monitor using Cartesian coordinate system, or
- * planetarium dome using spherical coordinate system).
+ * of spatial graphic elements. This base class makes no assumption about the geometry
+ * of the display device (e.g. flat video monitor using Cartesian coordinate system,
+ * or planetarium dome using spherical coordinate system).
  *
- * <p>A newly constructed {@code Canvas} is initially empty. To make something appears, at least one
- * {@link MapLayer} must be added. The visual content depends on the {@link MapLayer} data and associated style.
- * The contents are usually symbols, features or images, but some implementations can also manage non-geographic
- * elements like a map scale.</p>
+ * <p>This {@code Canvas} base class does not draw anything by itself.
+ * Subclasses are responsible for drawing graphic elements.
+ * The visual contents are usually geographic located symbols, features or images,
+ * but some implementations can also manage non-geographic elements like a map scale.</p>
  *
- * <p>In addition to the set of {@link MapLayer}s to display,
- * a {@code Canvas} manages four fundamental properties:</p>
+ * <p>A {@code Canvas} manages four fundamental properties:</p>
  * <ul>
  *   <li>The coordinate reference system to use for displaying data.</li>
  *   <li>The location of data to display in all dimensions, including the dimensions
@@ -92,7 +91,7 @@ import org.apache.sis.coverage.grid.GridExtent;
  * <ol class="verbose">
  *   <li>The <cite>data CRS</cite> is specific to the data to be displayed.
  *       It may be anything convertible to the <cite>objective CRS</cite>.
- *       Different {@link MapItem} instances may use different data CRS,
+ *       Different graphic elements may use different data CRS,
  *       potentially with a different number of dimensions.</li>
  *   <li>The {@linkplain #getObjectiveCRS objective CRS} is the common CRS in which all data
  *       are converted before to be displayed. If the objective CRS involves a map projection,
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/package-info.java b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/package-info.java
index 1be1e70..2b8bbb2 100644
--- a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/package-info.java
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/package-info.java
@@ -18,7 +18,7 @@
 
 /**
  * Symbology and map representations, together with a rendering engine for display.
- * The {@linkplain org.apache.sis.portrayal.MapItem map item} is the root node of a map.
+ * This package is currently in early draft stage.
  *
  * <h2>Synchronization</h2>
  * Unless otherwise specified, classes in this package are not thread-safe.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
index 26496b8..38c698b 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
@@ -43,12 +43,12 @@ import org.apache.sis.util.resources.Errors;
 import org.apache.sis.io.wkt.Formatter;
 import org.apache.sis.io.wkt.FormattableObject;
 import org.apache.sis.internal.referencing.WKTUtilities;
+import org.apache.sis.internal.referencing.TemporalAccessor;
 import org.apache.sis.referencing.IdentifiedObjects;
 import org.apache.sis.measure.Range;
 import org.apache.sis.math.Vector;
 
 import static java.lang.Double.doubleToLongBits;
-import org.apache.sis.internal.referencing.TemporalAccessor;
 import static org.apache.sis.internal.util.Numerics.SIGN_BIT_MASK;
 import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
 import static org.apache.sis.util.ArgumentChecks.ensureDimensionMatches;
diff --git a/ide-project/NetBeans/nbproject/build-impl.xml b/ide-project/NetBeans/nbproject/build-impl.xml
index fb2b9ce..6797e6b 100644
--- a/ide-project/NetBeans/nbproject/build-impl.xml
+++ b/ide-project/NetBeans/nbproject/build-impl.xml
@@ -181,7 +181,6 @@ is divided into following sections:
         <condition property="have.tests">
             <or>
                 <available file="${test.javafx.dir}"/>
-                <available file="${test.webapp.dir}"/>
                 <available file="${test.console.dir}"/>
                 <available file="${test.portrayal.dir}"/>
                 <available file="${test.earth-obs.dir}"/>
@@ -348,7 +347,6 @@ is divided into following sections:
         <fail unless="src.gdal.dir">Must set src.gdal.dir</fail>
         <fail unless="src.c.gdal.dir">Must set src.c.gdal.dir</fail>
         <fail unless="test.javafx.dir">Must set test.javafx.dir</fail>
-        <fail unless="test.webapp.dir">Must set test.webapp.dir</fail>
         <fail unless="test.console.dir">Must set test.console.dir</fail>
         <fail unless="test.portrayal.dir">Must set test.portrayal.dir</fail>
         <fail unless="test.earth-obs.dir">Must set test.earth-obs.dir</fail>
@@ -667,9 +665,6 @@ is divided into following sections:
                             <fileset dir="${test.javafx.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                                 <filename name="@{testincludes}"/>
                             </fileset>
-                            <fileset dir="${test.webapp.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
-                                <filename name="@{testincludes}"/>
-                            </fileset>
                             <fileset dir="${test.console.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                                 <filename name="@{testincludes}"/>
                             </fileset>
@@ -747,9 +742,6 @@ is divided into following sections:
                     <fileset dir="${test.javafx.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
-                    <fileset dir="${test.webapp.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
-                        <filename name="@{testincludes}"/>
-                    </fileset>
                     <fileset dir="${test.console.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
@@ -1877,14 +1869,14 @@ is divided into following sections:
         <!-- You can override this target in the ../build.xml file. -->
     </target>
     <target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-javac-module-properties-with-module">
-        <j2seproject3:modulename property="test.module.name" sourcepath="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir}"/>
-        <condition else="${empty.dir}" property="javac.test.sourcepath" value="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir}">
+        <j2seproject3:modulename property="test.module.name" sourcepath="${test.javafx.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir}"/>
+        <condition else="${empty.dir}" property="javac.test.sourcepath" value="${test.javafx.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir}">
             <and>
                 <isset property="test.module.name"/>
                 <length length="0" string="${test.module.name}" when="greater"/>
             </and>
         </condition>
-        <condition else="--patch-module ${module.name}=${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir} --add-reads ${module.name}=ALL-UNNAMED" prope [...]
+        <condition else="--patch-module ${module.name}=${test.javafx.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir} --add-reads ${module.name}=ALL-UNNAMED" property="javac.test.com [...]
             <and>
                 <isset property="test.module.name"/>
                 <length length="0" string="${test.module.name}" when="greater"/>
@@ -1925,17 +1917,16 @@ is divided into following sections:
     </target>
     <target depends="-init-test-javac-module-properties-with-module,-init-test-module-properties-without-module" name="-init-test-module-properties"/>
     <target if="do.depend.true" name="-compile-test-depend">
-        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.g [...]
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.javafx.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir}"/>
     </target>
     <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${javac.test.sourcepath}" srcdir="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${tes [...]
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${javac.test.sourcepath}" srcdir="${test.javafx.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${te [...]
             <customize>
                 <compilerarg line="${javac.test.compilerargs}"/>
             </customize>
         </j2seproject3:javac>
         <copy todir="${build.test.classes.dir}">
             <fileset dir="${test.javafx.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-            <fileset dir="${test.webapp.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.portrayal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -1967,14 +1958,13 @@ is divided into following sections:
     <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
         <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}, module-info.java" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:$ [...]
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}, module-info.java" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${test.javafx.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir} [...]
             <customize>
                 <compilerarg line="${javac.test.compilerargs}"/>
             </customize>
         </j2seproject3:javac>
         <copy todir="${build.test.classes.dir}">
             <fileset dir="${test.javafx.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-            <fileset dir="${test.webapp.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.portrayal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
diff --git a/ide-project/NetBeans/nbproject/genfiles.properties b/ide-project/NetBeans/nbproject/genfiles.properties
index 71b14ef..ebf1415 100644
--- a/ide-project/NetBeans/nbproject/genfiles.properties
+++ b/ide-project/NetBeans/nbproject/genfiles.properties
@@ -3,6 +3,6 @@
 build.xml.data.CRC32=58e6b21c
 build.xml.script.CRC32=462eaba0
 build.xml.stylesheet.CRC32=28e38971@1.53.1.46
-nbproject/build-impl.xml.data.CRC32=59eb8bb4
-nbproject/build-impl.xml.script.CRC32=3caff6e1
-nbproject/build-impl.xml.stylesheet.CRC32=d549e5cc@1.97.0.48
+nbproject/build-impl.xml.data.CRC32=05bf4473
+nbproject/build-impl.xml.script.CRC32=532e10e3
+nbproject/build-impl.xml.stylesheet.CRC32=d549e5cc@1.99.0.48
diff --git a/ide-project/NetBeans/nbproject/project.properties b/ide-project/NetBeans/nbproject/project.properties
index 117e7cb..b246187 100644
--- a/ide-project/NetBeans/nbproject/project.properties
+++ b/ide-project/NetBeans/nbproject/project.properties
@@ -56,7 +56,6 @@ src.local-src.dir    = ../local-src
 src.javafx.dir       = ${project.root}/application/sis-javafx/doc
 test.javafx.dir      = ${project.root}/application/sis-javafx/doc
 src.webapp.dir       = ${project.root}/application/sis-webapp/src/main/java
-test.webapp.dir      = ${project.root}/application/sis-webapp/src/test/java
 src.console.dir      = ${project.root}/application/sis-console/src/main/java
 test.console.dir     = ${project.root}/application/sis-console/src/test/java
 src.earth-obs.dir    = ${project.root}/storage/sis-earth-observation/src/main/java
diff --git a/ide-project/NetBeans/nbproject/project.xml b/ide-project/NetBeans/nbproject/project.xml
index 1c0d1e1..b8fc957 100644
--- a/ide-project/NetBeans/nbproject/project.xml
+++ b/ide-project/NetBeans/nbproject/project.xml
@@ -47,7 +47,6 @@
             </source-roots>
             <test-roots>
                 <root id="test.javafx.dir" name="Test JavaFX application"/>
-                <root id="test.webapp.dir" name="Test web application"/>
                 <root id="test.console.dir" name="Test Console"/>
                 <root id="test.portrayal.dir" name="Test Portrayal"/>
                 <root id="test.earth-obs.dir" name="Test Earth observation"/>
diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClause.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClause.java
index c6d1229..3ee21c5 100644
--- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClause.java
+++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClause.java
@@ -18,6 +18,7 @@ package org.apache.sis.internal.sql.feature;
 
 import org.opengis.geometry.Envelope;
 import org.opengis.geometry.Geometry;
+import org.opengis.metadata.extent.GeographicBoundingBox;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.WraparoundMethod;
 import org.apache.sis.internal.feature.Geometries;
@@ -28,7 +29,6 @@ import org.apache.sis.internal.metadata.sql.SQLBuilder;
 import org.opengis.feature.Feature;
 import org.opengis.filter.Filter;
 import org.opengis.filter.ValueReference;
-import org.opengis.metadata.extent.GeographicBoundingBox;
 
 
 /**
diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClauseWriter.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClauseWriter.java
index f6bdad0..04628da 100644
--- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClauseWriter.java
+++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClauseWriter.java
@@ -37,10 +37,8 @@ import org.opengis.filter.Expression;
 import org.opengis.filter.ValueReference;
 import org.opengis.filter.LogicalOperator;
 import org.opengis.filter.LogicalOperatorName;
-import org.opengis.filter.ComparisonOperator;
 import org.opengis.filter.ComparisonOperatorName;
 import org.opengis.filter.BinaryComparisonOperator;
-import org.opengis.filter.SpatialOperator;
 import org.opengis.filter.SpatialOperatorName;
 import org.opengis.filter.BetweenComparisonOperator;
 
@@ -91,11 +89,10 @@ public class SelectionClauseWriter extends Visitor<Feature, SelectionClause> {
             sql.append(" BETWEEN "); if (write(sql, filter.getLowerBoundary())) return;
             sql.append(" AND ");         write(sql, filter.getUpperBoundary());
         });
-        setNullAndNilHandlers((f,sql) -> {
-            final ComparisonOperator<Feature> filter = (ComparisonOperator<Feature>) f;
+        setNullAndNilHandlers((filter, sql) -> {
             final List<Expression<? super Feature, ?>> expressions = filter.getExpressions();
             if (expressions.size() == 1) {
-                write(sql, filter.getExpressions().get(0));
+                write(sql, expressions.get(0));
                 sql.append(" IS NULL");
             } else {
                 sql.invalidate();
@@ -410,8 +407,7 @@ public class SelectionClauseWriter extends Visitor<Feature, SelectionClause> {
         }
 
         /** Writes the function as an SQL statement. */
-        @Override public void accept(final Filter<Feature> f, final SelectionClause sql) {
-            final SpatialOperator<Feature> filter = (SpatialOperator<Feature>) f;
+        @Override public void accept(final Filter<Feature> filter, final SelectionClause sql) {
             sql.append(name);
             writeParameters(sql, filter.getExpressions(), ", ", false);
         }
diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/ExtendedClauseWriter.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/ExtendedClauseWriter.java
index 52db0bb..70d652f 100644
--- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/ExtendedClauseWriter.java
+++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/ExtendedClauseWriter.java
@@ -19,8 +19,6 @@ package org.apache.sis.internal.sql.postgis;
 import org.apache.sis.internal.sql.feature.SelectionClauseWriter;
 
 // Branch-dependent imports
-import org.opengis.feature.Feature;
-import org.opengis.filter.SpatialOperator;
 import org.opengis.filter.SpatialOperatorName;
 
 
@@ -45,7 +43,7 @@ final class ExtendedClauseWriter extends SelectionClauseWriter {
     private ExtendedClauseWriter() {
         super(DEFAULT);
         setFilterHandler(SpatialOperatorName.BBOX, (f,sql) -> {
-            writeBinaryOperator(sql, (SpatialOperator<Feature>) f, " && ");
+            writeBinaryOperator(sql, f, " && ");
         });
     }
 
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/JoinFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/JoinFeatureSet.java
index c74e056..04ea5a9 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/JoinFeatureSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/JoinFeatureSet.java
@@ -204,7 +204,7 @@ public class JoinFeatureSet extends AggregatedFeatureSet {
      * @param  rightAlias   name of the associations to the {@code right} features, or {@code null} for a default name.
      * @param  joinType     whether values on both sides are required (inner join), or only one side (outer join).
      * @param  condition    join condition as <var>property from left feature</var> = <var>property from right feature</var>.
-     * @param  featureInfo  information about the {@link FeatureType} of this
+     * @param  featureInfo  information about the {@link FeatureType} of this feature set.
      * @throws DataStoreException if an error occurred while creating the feature set.
      */
     public JoinFeatureSet(final StoreListeners parent,