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 2023/01/02 11:42:46 UTC

[sis] 01/02: Reduce the amount of `@SuppressWarnings("null")` annotations. There is too many false positives for making null check useful. This commit contains opportunistic comment formatting in modified files.

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 422c7f36fe94c93d6d572cee02d7b1a1d4adf4f9
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Sat Dec 31 16:35:51 2022 +0100

    Reduce the amount of `@SuppressWarnings("null")` annotations.
    There is too many false positives for making null check useful.
    This commit contains opportunistic comment formatting in modified files.
    
    Corresponding changes in NetBeans project configuration:
    - Disable null checks because too many false positives.
    - Disable other hints that not available in Java 11.
---
 .../java/org/apache/sis/console/CommandRunner.java |  2 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java |  1 -
 .../apache/sis/feature/DefaultAssociationRole.java | 13 +++---
 .../java/org/apache/sis/feature/FeatureFormat.java |  5 +--
 .../apache/sis/feature/builder/TypeBuilder.java    |  1 -
 .../org/apache/sis/filter/ComparisonFilter.java    |  1 -
 .../sis/internal/jaxb/NonMarshalledAuthority.java  |  1 -
 .../sis/internal/jaxb/lan/LocaleAndCharset.java    |  4 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |  6 +--
 .../sis/metadata/iso/extent/ExtentsTest.java       |  1 -
 .../apache/sis/test/xml/DocumentComparator.java    |  6 +--
 .../org/apache/sis/geometry/AbstractEnvelope.java  | 12 ++---
 .../org/apache/sis/geometry/CoordinateFormat.java  |  5 +--
 .../java/org/apache/sis/geometry/Envelopes.java    |  3 --
 .../org/apache/sis/geometry/GeneralEnvelope.java   |  5 +--
 .../java/org/apache/sis/geometry/Shapes2D.java     |  1 -
 .../provider/FranceGeocentricInterpolation.java    |  5 +--
 .../referencing/provider/GeocentricAffine.java     |  1 -
 .../sis/internal/referencing/provider/NADCON.java  |  5 +--
 .../sis/internal/referencing/provider/NTv2.java    |  3 +-
 .../main/java/org/apache/sis/io/wkt/Formatter.java |  1 -
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |  1 -
 .../parameter/DefaultParameterDescriptorGroup.java |  1 -
 .../java/org/apache/sis/parameter/Parameters.java  |  1 -
 .../factory/ConcurrentAuthorityFactory.java        |  1 -
 .../referencing/factory/sql/EPSGDataAccess.java    |  1 -
 .../operation/CoordinateOperationFinder.java       |  5 +--
 .../sis/referencing/operation/matrix/Matrices.java |  9 ++--
 .../transform/DefaultMathTransformFactory.java     |  1 -
 .../sis/referencing/factory/TestFactorySource.java |  1 -
 .../factory/sql/epsg/DataScriptFormatter.java      |  1 -
 .../main/java/org/apache/sis/math/ArrayVector.java | 21 +++++----
 .../src/main/java/org/apache/sis/setup/About.java  |  2 +-
 .../sis/util/collection/DefaultTreeTable.java      |  1 -
 .../sis/util/collection/TreeTableFormat.java       | 11 +++--
 ide-project/NetBeans/nbproject/cfg_hints.xml       | 52 ++++++++++++++++++++++
 .../org/apache/sis/storage/geotiff/CRSBuilder.java |  3 +-
 .../sis/internal/netcdf/ucar/DecoderWrapper.java   |  1 -
 .../apache/sis/storage/netcdf/MetadataReader.java  |  1 -
 .../org/apache/sis/storage/DataStoreRegistry.java  |  2 +-
 .../org/apache/sis/storage/StorageConnector.java   |  1 -
 41 files changed, 107 insertions(+), 92 deletions(-)

diff --git a/application/sis-console/src/main/java/org/apache/sis/console/CommandRunner.java b/application/sis-console/src/main/java/org/apache/sis/console/CommandRunner.java
index fb8f2f5cad..1a33bc9e3a 100644
--- a/application/sis-console/src/main/java/org/apache/sis/console/CommandRunner.java
+++ b/application/sis-console/src/main/java/org/apache/sis/console/CommandRunner.java
@@ -221,7 +221,7 @@ abstract class CommandRunner {
             console = System.console();
             colors = (value != null) ? Option.COLORS.parseBoolean(value) : (console != null) && X364.isAnsiSupported();
         } catch (RuntimeException e) {
-            @SuppressWarnings("null")                                   // 'option' has been assigned in 'get' argument.
+            @SuppressWarnings("null")                   // `option` has been assigned in `get` argument.
             final String name = option.label();
             throw new InvalidOptionException(Errors.format(Errors.Keys.IllegalOptionValue_2, name, value), name);
         }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index bfc22b4402..3a2aaf195e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -522,7 +522,6 @@ public class GridGeometry implements LenientComparable, Serializable {
      * @param  rounding   controls behavior of rounding from floating point values to integers.
      * @throws IllegalGridGeometryException if the math transform cannot compute the grid extent or the resolution.
      */
-    @SuppressWarnings("null")
     public GridGeometry(final PixelInCell anchor, final MathTransform gridToCRS, final Envelope envelope, final GridRoundingMode rounding) {
         if (gridToCRS == null) {
             ArgumentChecks.ensureNonNull("envelope", envelope);
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
index cf1d6aac7a..14f98fc51b 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
@@ -233,14 +233,14 @@ public class DefaultAssociationRole extends FieldType implements FeatureAssociat
                 } else {
                     /*
                      * The feature that we need to resolve is not the one we just created. Maybe we can find
-                     * this desired feature in an association of the 'creating' feature, instead of beeing
-                     * the 'creating' feature itself. This is a little bit unusual, but not illegal.
+                     * this desired feature in an association of the `creating` feature, instead of beeing
+                     * the `creating` feature itself. This is a little bit unusual, but not illegal.
                      */
                     final List<FeatureType> deferred = new ArrayList<>();
                     resolved = search(creating, properties, name, deferred);
                     if (resolved == null) {
                         /*
-                         * Did not found the desired FeatureType in the 'creating' instance.
+                         * Did not found the desired FeatureType in the `creating` instance.
                          * Try harder, by searching recursively in associations of associations.
                          */
                         if (deferred.isEmpty() || (resolved = deepSearch(deferred, name)) == null) {
@@ -270,7 +270,6 @@ public class DefaultAssociationRole extends FieldType implements FeatureAssociat
      * @param  deferred    where to store {@code FeatureType}s to be eventually used for a deep search.
      * @return the feature of the given name, or {@code null} if none.
      */
-    @SuppressWarnings("null")
     private static FeatureType search(final FeatureType feature, Collection<? extends PropertyType> properties,
             final GenericName name, final List<FeatureType> deferred)
     {
@@ -365,7 +364,7 @@ public class DefaultAssociationRole extends FieldType implements FeatureAssociat
     public final FeatureType getValueType() {
         /*
          * This method shall be final for consistency with other methods in this classes
-         * which use the 'valueType' field directly. Furthermore, this method is invoked
+         * which use the `valueType` field directly. Furthermore, this method is invoked
          * (indirectly) by DefaultFeatureType constructors.
          */
         FeatureType type = valueType;
@@ -491,8 +490,8 @@ public class DefaultAssociationRole extends FieldType implements FeatureAssociat
     @Override
     public int hashCode() {
         /*
-         * Do not use the full 'valueType' object for computing hash code,
-         * because it may change before and after 'resolve' is invoked. In
+         * Do not use the full `valueType` object for computing hash code,
+         * because it may change before and after `resolve` is invoked. In
          * addition, this avoid infinite recursivity in case of cyclic graph.
          */
         return super.hashCode() + valueType.getName().hashCode();
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java b/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
index 78011cce79..6b55312d79 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
@@ -307,7 +307,6 @@ public class FeatureFormat extends TabularFormat<Object> {
      * @throws IOException if an error occurred while writing to the given appendable.
      */
     @Override
-    @SuppressWarnings("null")       // Many false positives in this method.
     public void format(final Object object, final Appendable toAppendTo) throws IOException {
         ArgumentChecks.ensureNonNull("object",     object);
         ArgumentChecks.ensureNonNull("toAppendTo", toAppendTo);
@@ -629,9 +628,9 @@ format:                     for (final AttributeType<?> ct : ((AttributeType<?>)
                                 Collection<?> cv = CollectionsExt.singletonOrEmpty(ct.getDefaultValue());
                                 if (feature != null) {
                                     /*
-                                     * Usually, the property 'cp' below is null because all features use the same
+                                     * Usually, the property `cp` below is null because all features use the same
                                      * characteristic value (for example the same unit of measurement),  which is
-                                     * given by the default value 'cv'.  Nevertheless we have to check if current
+                                     * given by the default value `cv`.  Nevertheless we have to check if current
                                      * feature overrides this characteristic.
                                      */
                                     final Property cp = feature.getProperty(propertyType.getName().toString());
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java b/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
index 475c0272d1..59d7249d4e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
@@ -433,7 +433,6 @@ public abstract class TypeBuilder implements Localized {
      * @return element of the given name, or {@code null} if none were found.
      * @throws IllegalArgumentException if the given name is ambiguous.
      */
-    @SuppressWarnings("null")
     final <E extends TypeBuilder> E forName(final List<E> types, final String name, final boolean nonAmbiguous) {
         E best      = null;                     // Best type found so far.
         E ambiguity = null;                     // If two types are found at the same depth, the other type.
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 e7e7540274..5e43ed87d3 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
@@ -236,7 +236,6 @@ abstract class ComparisonFilter<R> extends BinaryFunction<R,Object,Object>
      * @param  left   the first object to compare. Must be non-null.
      * @param  right  the second object to compare. Must be non-null.
      */
-    @SuppressWarnings("null")
     private boolean evaluate(Object left, Object right) {
         /*
          * For numbers, the apply(…) method inherited from parent class will delegate to specialized methods like
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/NonMarshalledAuthority.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/NonMarshalledAuthority.java
index 33010e5040..21b6577c93 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/NonMarshalledAuthority.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/NonMarshalledAuthority.java
@@ -216,7 +216,6 @@ public final class NonMarshalledAuthority<T> extends CitationConstant.Authority<
      *
      * @see #setMarshallable(Collection, Identifier)
      */
-    @SuppressWarnings("null")
     public static Collection<? extends Identifier> setMarshallables(
             final Collection<Identifier> identifiers, final Collection<? extends Identifier> newValues)
     {
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocaleAndCharset.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocaleAndCharset.java
index c465140092..e99f8b7ccb 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocaleAndCharset.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocaleAndCharset.java
@@ -350,7 +350,6 @@ public final class LocaleAndCharset implements Node {
      * @param  newValues  the new languages.
      * @return the given map, or a new map if necessary and the given map was null.
      */
-    @SuppressWarnings("null")
     public static Map<Locale,Charset> setLanguages(Map<Locale,Charset> locales, final Collection<? extends Locale> newValues) {
         final Charset encoding = (locales != null) ? CollectionsExt.first(locales.values()) : null;
         if (newValues == null || newValues.isEmpty()) {
@@ -369,8 +368,9 @@ public final class LocaleAndCharset implements Node {
         /*
          * If an encoding was defined before invocation of this method and is not associated to any
          * locale specified in `newValues`, preserve that encoding in an entry with null locale.
+         * Note: `locales` is non-null if `encoding` is non-null.
          */
-        if (encoding != null && !locales.values().contains(encoding)) {     // `locales` is non-null if `encoding` is non-null.
+        if (encoding != null && !locales.values().contains(encoding)) {
             locales.put(null, encoding);
         }
         return locales;
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java
index 98223d0a27..e3b70e62e7 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java
@@ -301,11 +301,11 @@ public class MetadataWriter extends MetadataSource {
                 }
                 /*
                  * We have found a column to add. Check if the column actually needs to be added to the parent table
-                 * (if such parent exists). In most case, the answer is "no" and 'addTo' is equal to 'table'.
+                 * (if such parent exists). In most case, the answer is "no" and `addTo` is equal to `table`.
                  */
                 String addTo = table;
                 if (helper.dialect.supportsTableInheritance) {
-                    @SuppressWarnings("null")
+                    @SuppressWarnings("null")     // `colTables` is initialized in same time than `colTypes`.
                     final Class<?> declaring = colTables.get(column);
                     if (!interfaceType.isAssignableFrom(declaring)) {
                         addTo = getTableName(declaring);
@@ -402,7 +402,7 @@ public class MetadataWriter extends MetadataSource {
         /*
          * Process all dependencies now. This block may invoke this method recursively.
          * Once a dependency has been added to the database, the corresponding value in
-         * the 'asMap' HashMap is replaced by the identifier of the dependency we just added.
+         * the `asMap` HashMap is replaced by the identifier of the dependency we just added.
          */
         Map<String,FKey> referencedTables = null;
         for (final Map.Entry<String,Object> entry : asSingletons.entrySet()) {
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/ExtentsTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/ExtentsTest.java
index 122699462e..6b096f44be 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/ExtentsTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/ExtentsTest.java
@@ -62,7 +62,6 @@ public final class ExtentsTest extends TestCase {
      * @throws IncommensurableException if a conversion between incompatible units were attempted.
      */
     @Test
-    @SuppressWarnings("null")
     public void testGetVerticalRange() throws IncommensurableException {
         final List<DefaultVerticalExtent> extents = Arrays.asList(
                 new DefaultVerticalExtent( -200,  -100, VerticalCRSMock.HEIGHT),
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/DocumentComparator.java b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/DocumentComparator.java
index c5c721665d..a3e568caa3 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/DocumentComparator.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/DocumentComparator.java
@@ -470,7 +470,6 @@ public class DocumentComparator {
      * @param expected  the node having the expected attributes.
      * @param actual    the node to compare.
      */
-    @SuppressWarnings("null")
     protected void compareAttributes(final Node expected, final Node actual) {
         final NamedNodeMap expectedAttributes = expected.getAttributes();
         final NamedNodeMap actualAttributes   = actual.getAttributes();
@@ -500,7 +499,7 @@ public class DocumentComparator {
                  * └───────────────────┴─────────────────────────────────┴──────────────┴─────────────┘
                  *
                  * By default, this block is not be executed. However if the user gave us Nodes that are
-                 * not namespace aware, then the 'isIgnored(…)' method will try to parse the node name.
+                 * not namespace aware, then the `isIgnored(…)` method will try to parse the node name.
                  */
                 name = expAttr.getNodeName();
             }
@@ -528,7 +527,7 @@ public class DocumentComparator {
         if (!ignored.isEmpty()) {
             if (ns == null) {
                 /*
-                 * If there is no namespace, then the 'name' argument should be the qualified name
+                 * If there is no namespace, then the `name` argument should be the qualified name
                  * (with a prefix). Example: "xsi:schemaLocation". We will look first for an exact
                  * name match, then for a match after replacing the local name by "*".
                  */
@@ -754,7 +753,6 @@ public class DocumentComparator {
      * @param  node           the node to format.
      * @param  lineSeparator  the platform-specific line separator.
      */
-    @SuppressWarnings("null")
     private static void formatNode(final StringBuilder buffer, final Node node, final String lineSeparator) {
         if (node == null) {
             buffer.append("(no node)").append(lineSeparator);
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 56998127d3..176be0fbf6 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
@@ -601,7 +601,7 @@ public abstract class AbstractEnvelope extends FormattableObject implements Enve
         final int dimension = getDimension();
         for (int i=0; i!=dimension; i++) {
             final double span = getUpper(i) - getLower(i);  // Do not use getSpan(i).
-            if (!(span > 0)) {                              // Use '!' for catching NaN.
+            if (!(span > 0)) {                              // Use `!` for catching NaN.
                 if (!isNegative(span)) {
                     return EMPTY;                           // Span is positive zero.
                 }
@@ -651,11 +651,11 @@ public abstract class AbstractEnvelope extends FormattableObject implements Enve
             }
             /*
              * Assign the minimum and maximum coordinate values in the dimension where a wraparound has been found.
-             * The 'for' loop below iterates only over the 'i' values for which the 'isWrapAround' bit is set to 1.
+             * The `for` loop below iterates only over the `i` values for which the `isWrapAround` bit is set to 1.
              */
             int mask = 1;               // For identifying whether we need to set the lower or the upper coordinate.
-            @SuppressWarnings("null")
-            final CoordinateSystem cs = crs.getCoordinateSystem();            // Should not be null at this point.
+            @SuppressWarnings("null")   // CRS should not be null at this point.
+            final CoordinateSystem cs = crs.getCoordinateSystem();
             for (int i; (i = Long.numberOfTrailingZeros(isWrapAround)) != Long.SIZE; isWrapAround &= ~(1L << i)) {
                 final CoordinateSystemAxis axis = cs.getAxis(i);
                 final double min = axis.getMinimumValue();
@@ -699,7 +699,7 @@ public abstract class AbstractEnvelope extends FormattableObject implements Enve
             return true;
         }
         for (int i=0; i<dimension; i++) {
-            if (!(getSpan(i) > 0)) {                            // Use '!' in order to catch NaN
+            if (!(getSpan(i) > 0)) {            // Use `!` in order to catch NaN
                 return true;
             }
         }
@@ -778,7 +778,7 @@ public abstract class AbstractEnvelope extends FormattableObject implements Enve
                 if (isNegative(upper - lower)) {
                     /*
                      * "Crossing the anti-meridian" case: if we reach this point, then the
-                     * [upper...lower] range  (note the 'lower' and 'upper' interchanging)
+                     * [upper...lower] range  (note the `lower` and `upper` interchanging)
                      * is actually a space outside the envelope and we have checked that
                      * the coordinate value is outside that space.
                      */
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
index 7ea1996634..8238da32db 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
@@ -966,7 +966,6 @@ public class CoordinateFormat extends CompoundFormat<DirectPosition> {
      *
      * @param  crs  the target CRS in the conversion from ground units to CRS units.
      */
-    @SuppressWarnings("null")
     private void applyGroundPrecision(final CoordinateReferenceSystem crs) {
         /*
          * If the given resolution is linear (for example in metres), compute an equivalent resolution in degrees
@@ -1622,13 +1621,13 @@ skipSep:    if (i != 0) {
                 throw new LocalizedParseException(getLocale(), key, args, index);
             }
             /*
-             * At this point 'subPos' is set to the beginning of the next coordinate to parse in 'asString'.
+             * At this point `subPos` is set to the beginning of the next coordinate to parse in `asString`.
              * Parse the value as a number, angle or date, as determined from the coordinate system axis.
              */
             if (formats != null) {
                 format = formats[i];
             }
-            @SuppressWarnings("null")
+            @SuppressWarnings("null")       // `format` was initially null only if `formats` is non-null.
             final Object object = format.parseObject(asString, subPos);
             if (object == null) {
                 /*
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelopes.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelopes.java
index 8d829b99bb..4736cef6b6 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelopes.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/Envelopes.java
@@ -302,7 +302,6 @@ public final class Envelopes extends Static {
      * @throws TransformException if the point cannot be transformed
      *         or if a problem occurred while calculating the derivative.
      */
-    @SuppressWarnings("null")
     static Matrix derivativeAndTransform(final MathTransform transform, final double[] srcPts,
             final double[] dstPts, final int dstOff, final boolean derivate) throws TransformException
     {
@@ -376,7 +375,6 @@ public final class Envelopes extends Static {
      *                    or {@code null} for computing the union of all results instead.
      * @return the transformed envelope. May be {@code null} if {@code results} was non-null.
      */
-    @SuppressWarnings("null")
     private static GeneralEnvelope transform(final MathTransform transform, final Envelope envelope,
             double[] targetPt, final List<GeneralEnvelope> results) throws TransformException
     {
@@ -607,7 +605,6 @@ nextPoint:  for (int pointIndex = 0;;) {                // Break condition at th
      *
      * @since 0.5
      */
-    @SuppressWarnings("null")
     public static GeneralEnvelope transform(final CoordinateOperation operation, Envelope envelope)
             throws TransformException
     {
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
index 7e84dbf427..5a56f97871 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
@@ -418,7 +418,6 @@ public class GeneralEnvelope extends ArrayEnvelope implements Cloneable, Seriali
             System.arraycopy(source, srcOffset, coordinates, beginIndex, dimension);
             System.arraycopy(source, srcOffset + (source.length >>> 1), coordinates, beginIndex + d, dimension);
         } else {
-            @SuppressWarnings("null")
             final DirectPosition lower = envelope.getLowerCorner();
             final DirectPosition upper = envelope.getUpperCorner();
             for (int i=0; i<dimension; i++) {
@@ -845,7 +844,7 @@ public class GeneralEnvelope extends ArrayEnvelope implements Cloneable, Seriali
             final double max1  = upper.getOrdinate(i);
             final double span0 = max0 - min0;
             final double span1 = max1 - min1;
-            if (isSameSign(span0, span1)) {                 // Always 'false' if any value is NaN.
+            if (isSameSign(span0, span1)) {                 // Always `false` if any value is NaN.
                 /*
                  * First, verify that the two envelopes intersect.
                  *     ┌──────────┐             ┌─────────────┐
@@ -1155,7 +1154,7 @@ public class GeneralEnvelope extends ArrayEnvelope implements Cloneable, Seriali
             final int iUpper = iLower + d;
             final double lower = coordinates[iLower];
             final double upper = coordinates[iUpper];
-            if (isNegative(upper - lower)) {                            // Use 'isNegative' for catching [+0 … -0] range.
+            if (isNegative(upper - lower)) {                        // Use `isNegative(…)` for catching [+0 … -0] range.
                 final CoordinateSystemAxis axis = getAxis(crs, i);
                 if (isWrapAround(axis)) {
                     changed = true;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/Shapes2D.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/Shapes2D.java
index 9e4bddc033..a9bd3c57c8 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/Shapes2D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/Shapes2D.java
@@ -411,7 +411,6 @@ public final class Shapes2D extends Static {
      * @see #transform(MathTransform2D, Rectangle2D, Rectangle2D)
      * @see Envelopes#transform(CoordinateOperation, Envelope)
      */
-    @SuppressWarnings("null")
     public static Rectangle2D transform(final CoordinateOperation operation,
                                         final Rectangle2D         envelope,
                                               Rectangle2D         destination)
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/FranceGeocentricInterpolation.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/FranceGeocentricInterpolation.java
index caf95df88b..ddb61882f5 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/FranceGeocentricInterpolation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/FranceGeocentricInterpolation.java
@@ -365,7 +365,6 @@ public class FranceGeocentricInterpolation extends GeodeticOperation {
      * @param  averages  an "average" value for the offset in each dimension, or {@code null} if unknown.
      * @param  scale     the factor by which to multiply each compressed value before to add to the average value.
      */
-    @SuppressWarnings("null")
     static DatumShiftGridFile<Angle,Length> getOrLoad(final Path file, final double[] averages, final double scale)
             throws FactoryException
     {
@@ -477,7 +476,7 @@ public class FranceGeocentricInterpolation extends GeodeticOperation {
                                     Level.WARNING, Errors.Keys.UnsupportedInterpolation_1, interp);
                             record.setLoggerName(Loggers.COORDINATE_OPERATION);
                             Logging.log(FranceGeocentricInterpolation.class, "createMathTransform", record);
-                            // We declare 'createMathTransform' method because it is closer to public API.
+                            // We declare `createMathTransform(…)` method because it is closer to public API.
                         }
                         break;
                     }
@@ -528,7 +527,7 @@ public class FranceGeocentricInterpolation extends GeodeticOperation {
             tZ[p] = -parseFloat(t.nextToken());
             final double accuracy = ACCURACY[Math.min(ACCURACY.length - 1,
                     Math.max(0, Integer.parseInt(t.nextToken()) - 1))];
-            if (!(accuracy >= grid.accuracy)) {     // Use '!' for replacing the initial NaN.
+            if (!(accuracy >= grid.accuracy)) {     // Use `!` for replacing the initial NaN.
                 grid.accuracy = accuracy;
             }
         } while ((line = in.readLine()) != null);
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/GeocentricAffine.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/GeocentricAffine.java
index cba324290f..bc0a0e21b7 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/GeocentricAffine.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/GeocentricAffine.java
@@ -339,7 +339,6 @@ public abstract class GeocentricAffine extends GeodeticOperation {
         {
             return null;        // Coordinate systems are not two EllipsoidalCS or two CartesianCS.
         }
-        @SuppressWarnings("null")
         int dimension  = sourceCS.getDimension();
         if (dimension != targetCS.getDimension()) {
             dimension  = 4;     // Any value greater than 3 means "mismatched dimensions" for this method.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NADCON.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NADCON.java
index 7111e2c7a8..0828872fd7 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NADCON.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NADCON.java
@@ -155,7 +155,6 @@ public final class NADCON extends AbstractProvider {
      * @param latitudeShifts   name of the grid file for latitude shifts.
      * @param longitudeShifts  name of the grid file for longitude shifts.
      */
-    @SuppressWarnings("null")
     static DatumShiftGridFile<Angle,Angle> getOrLoad(final Path latitudeShifts, final Path longitudeShifts)
             throws FactoryException
     {
@@ -171,7 +170,7 @@ public final class NADCON extends AbstractProvider {
                     final Loader loader;
                     Path file = latitudeShifts;
                     try {
-                        // Note: buffer size must be divisible by the size of 'float' data type.
+                        // Note: buffer size must be divisible by the size of `float` data type.
                         final ByteBuffer buffer = ByteBuffer.allocate(4096).order(ByteOrder.LITTLE_ENDIAN);
                         final FloatBuffer fb = buffer.asFloatBuffer();
                         try (ReadableByteChannel in = Files.newByteChannel(rlat)) {
@@ -445,7 +444,7 @@ public final class NADCON extends AbstractProvider {
                 }
                 /*
                  * Convert seconds to degrees for consistency with the unit declared at the beginning of this method,
-                 * then divide by cell size for consistency with the 'isCellRatio = true' configuration.
+                 * then divide by cell size for consistency with the `isCellRatio = true` configuration.
                  */
                 for (int i=0; i<array.length; i++) {
                     array[i] /= scale;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NTv2.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NTv2.java
index be435672eb..108d96fe9e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NTv2.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NTv2.java
@@ -158,7 +158,6 @@ public final class NTv2 extends AbstractProvider {
      * @param  file      name of the datum shift grid file to load.
      * @param  version   the expected version (1 or 2).
      */
-    @SuppressWarnings("null")
     static DatumShiftGridFile<Angle,Angle> getOrLoad(final Class<? extends AbstractProvider> provider,
             final Path file, final int version) throws FactoryException
     {
@@ -567,7 +566,7 @@ public final class NTv2 extends AbstractProvider {
                     ty[i] = (float) (buffer.getFloat() / dy);   // Division by dx and dy because isCellValueRatio = true.
                     tx[i] = (float) (buffer.getFloat() / dx);
                     final double accuracy = Math.min(buffer.getFloat() / dy, buffer.getFloat() / dx);
-                    if (accuracy > 0 && !(accuracy >= data.accuracy)) {     // Use '!' for replacing the initial NaN.
+                    if (accuracy > 0 && !(accuracy >= data.accuracy)) {     // Use `!` for replacing the initial NaN.
                         data.accuracy = accuracy;                           // Smallest non-zero accuracy.
                     }
                 }
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
index aced9fad00..f64bef6d26 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
@@ -796,7 +796,6 @@ public class Formatter implements Localized {
      * A {@code <remark>} can be included within the descriptions of source and target CRS embedded within
      * a coordinate transformation as well as within the coordinate transformation itself.</blockquote>
      */
-    @SuppressWarnings("null")
     private void appendComplement(final IdentifiedObject object, final FormattableObject parent, final FormattableObject gp) {
         isComplement = true;
         final boolean showIDs;      // Whether to format ID[…] elements.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
index a50cab95e3..5bae69b55b 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
@@ -1882,7 +1882,6 @@ class GeodeticObjectParser extends MathTransformParser implements Comparator<Coo
      * @return the {@code "VerticalCRS"} element as a {@link VerticalCRS} object.
      * @throws ParseException if the {@code "VerticalCRS"} element cannot be parsed.
      */
-    @SuppressWarnings("null")
     private SingleCRS parseVerticalCRS(final int mode, final Element parent, final boolean isBaseCRS)
             throws ParseException
     {
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
index 7728d40087..d1b3071673 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
@@ -367,7 +367,6 @@ public class DefaultParameterDescriptorGroup extends AbstractParameterDescriptor
      * @throws ParameterNotFoundException if there is no parameter for the given name.
      */
     @Override
-    @SuppressWarnings("null")
     public GeneralParameterDescriptor descriptor(final String name) throws ParameterNotFoundException {
         // Quick search for an exact match.
         ArgumentChecks.ensureNonNull("name", name);
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
index 59d38f21a0..c68b6d02c6 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
@@ -414,7 +414,6 @@ public abstract class Parameters implements ParameterValueGroup, Cloneable {
      * The {@link DefaultParameterValueGroup} subclass will override this method with a more efficient
      * implementation which avoid creating some deferred parameters.
      */
-    @SuppressWarnings("null")
     ParameterValue<?> parameterIfExist(final String name) throws ParameterNotFoundException {
         int i1 = 0, i2 = 0;
         ParameterValue<?> first     = null;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java
index 2bdb38399c..823976a0af 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java
@@ -388,7 +388,6 @@ public abstract class ConcurrentAuthorityFactory<DAO extends GeodeticAuthorityFa
      * @return Data Access Object (DAO) to use in {@code createFoo(String)} methods.
      * @throws FactoryException if the Data Access Object creation failed.
      */
-    @SuppressWarnings("null")
     private DAO getDataAccess() throws FactoryException {
         /*
          * First checks if the current thread is already using a factory. If yes, we will
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
index 7481a76ebd..7985cabf94 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
@@ -2834,7 +2834,6 @@ next:                   while (r.next()) {
      * @throws FactoryException if the object creation failed for some other reason.
      */
     @Override
-    @SuppressWarnings("null")
     public synchronized CoordinateOperation createCoordinateOperation(final String code)
             throws NoSuchAuthorityCodeException, FactoryException
     {
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java
index 436735e4d3..c32c92e177 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java
@@ -500,16 +500,15 @@ public class CoordinateOperationFinder extends CoordinateOperationRegistry {
      *       for the area of interest.</li>
      * </ul>
      *
-     * <p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
+     * This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
      * But a list is returned because the same step may be implemented by different operation methods. Only one element
-     * in the returned list should be selected (usually the first one).</p>
+     * in the returned list should be selected (usually the first one).
      *
      * @param  sourceCRS  input coordinate reference system.
      * @param  targetCRS  output coordinate reference system.
      * @return a coordinate operation from {@code sourceCRS} to {@code targetCRS}.
      * @throws FactoryException if the operation cannot be constructed.
      */
-    @SuppressWarnings("null")
     protected List<CoordinateOperation> createOperationStep(final GeodeticCRS sourceCRS,
                                                             final GeodeticCRS targetCRS)
             throws FactoryException
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java
index b20281f0aa..9e32ade91b 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java
@@ -235,7 +235,6 @@ public final class Matrices extends Static {
      * @param useEnvelopes {@code true} if source and destination envelopes shall be taken in account.
      *        If {@code false}, then source and destination envelopes will be ignored and can be null.
      */
-    @SuppressWarnings("null")
     private static MatrixSIS createTransform(final Envelope srcEnvelope, final AxisDirection[] srcAxes,
                                              final Envelope dstEnvelope, final AxisDirection[] dstAxes,
                                              final boolean useEnvelopes)
@@ -645,7 +644,7 @@ public final class Matrices extends Static {
         int targetDimensions = subMatrix.getNumRow();
         /*
          * Get data from the source matrix, together with the error terms if present.
-         * The 'stride' and 'length' values will be used for computing indices in that array.
+         * The `stride` and `length` values will be used for computing indices in that array.
          * The DoubleDouble temporary object is used only if the array contains error terms.
          */
         final int       stride   = sourceDimensions;
@@ -677,7 +676,7 @@ public final class Matrices extends Static {
                 targetDimensions,        1);                            // Copy some rows of only 1 column.
         /*
          * Set the pseudo-diagonal elements on the trailing new dimensions.
-         * 'diff' is zero for a square matrix and non-zero for rectangular matrix.
+         * `diff` is zero for a square matrix and non-zero for rectangular matrix.
          */
         final int diff = targetDimensions - sourceDimensions;
         for (int i=lastColumn - numTrailingCoordinates; i<lastColumn; i++) {
@@ -1081,7 +1080,7 @@ public final class Matrices extends Static {
                 if (i == j) {
                     e--;
                 }
-                if (!(Math.abs(e) <= tolerance)) {              // Uses '!' in order to catch NaN values.
+                if (!(Math.abs(e) <= tolerance)) {              // Uses `!` in order to catch NaN values.
                     return false;
                 }
             }
@@ -1275,7 +1274,7 @@ public final class Matrices extends Static {
                         /*
                          * If the number use exponential notation, we will not be allowed to append any zero.
                          * Otherwise we will append some zeros for right-alignment, but without exceeding the
-                         * IEEE 754 'double' accuracy for not giving a false sense of precision.
+                         * IEEE 754 `double` accuracy for not giving a false sense of precision.
                          */
                         if (element.indexOf('E') < 0) {
                             final int accuracy = -DecimalFunctions.floorLog10(Math.ulp(value));
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
index be1a205e43..571062d004 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
@@ -1035,7 +1035,6 @@ public class DefaultMathTransformFactory extends AbstractFactory implements Math
          *
          * @see #getCompletedParameters()
          */
-        @SuppressWarnings("null")
         final RuntimeException completeParameters(final DefaultMathTransformFactory factory, OperationMethod method,
                 final ParameterValueGroup userParams) throws FactoryException, IllegalArgumentException
         {
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/TestFactorySource.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/TestFactorySource.java
index 34578dad92..b47f3bd7ab 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/TestFactorySource.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/TestFactorySource.java
@@ -127,7 +127,6 @@ public final class TestFactorySource {
      *
      * @throws FactoryException if an error occurred while creating the factory.
      */
-    @SuppressWarnings("null")
     public static synchronized void createFactory() throws FactoryException {
         if (!isUnavailable) {
             EPSGFactory af = factory;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/epsg/DataScriptFormatter.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/epsg/DataScriptFormatter.java
index be86f8f9e1..881c63b6df 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/epsg/DataScriptFormatter.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/epsg/DataScriptFormatter.java
@@ -445,7 +445,6 @@ public final class DataScriptFormatter extends ScriptRunner {
     /**
      * Removes the useless "E0" exponents after floating point numbers.
      */
-    @SuppressWarnings("null")
     private String removeUselessExponents(String line) {
         StringBuilder cleaned = null;
         final Matcher matcher = uselessExponentPattern.matcher(line);
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java b/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java
index fee30e2be6..b92c86a738 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/ArrayVector.java
@@ -97,7 +97,6 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
      * or {@code null} if this method cannot do better than the given {@code Vector} instance.
      * This method shall be invoked only for vector of integer values (this is not verified).
      */
-    @SuppressWarnings("null")
     static Vector compress(final Vector source, final long min, final long max) {
         boolean isSigned = (min >= Byte.MIN_VALUE && max <= Byte.MAX_VALUE);
         if (isSigned || (min >= 0 && max <= 0xFF)) {
@@ -144,8 +143,8 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
     static Vector compress(final Vector source, final double tolerance) {
         if (!Float.class.equals(source.getElementType())) {
             /*
-             * For floating point types, verify if values are equivalent to 'float' values.
-             * There is two different ways to pad extra fraction digits in 'double' values:
+             * For floating point types, verify if values are equivalent to `float` values.
+             * There is two different ways to pad extra fraction digits in `double` values:
              * with zero fraction digits in base 2 representation (the standard Java cast),
              * or with zero fraction digits in base 10 representation.
              */
@@ -154,7 +153,7 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
             double v;
             do if (i >= length) {
                 return new Floats(source.floatValues());
-            } while (!(Math.abs((v = source.doubleValue(i++)) - (float) v) > tolerance));    // Use '!' for accepting NaN.
+            } while (!(Math.abs((v = source.doubleValue(i++)) - (float) v) > tolerance));    // Use `!` for accepting NaN.
             /*
              * Same try than above loop, but now using base 10 representation.
              * This is a more costly computation.
@@ -583,7 +582,7 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
          * signed integers. Consequently, we do not need to distinguish the two cases during the loop.
          */
         @Override public final Number increment(final double tolerance) {
-            if (!(tolerance >= 0 && tolerance < 1)) {                       // Use '!' for catching NaN.
+            if (!(tolerance >= 0 && tolerance < 1)) {                       // Use `!` for catching NaN.
                 return super.increment(tolerance);
             }
             int i = array.length;
@@ -713,7 +712,7 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
          * signed integers. Consequently, we do not need to distinguish the two cases during the loop.
          */
         @Override public final Number increment(final double tolerance) {
-            if (!(tolerance >= 0 && tolerance < 1)) {                       // Use '!' for catching NaN.
+            if (!(tolerance >= 0 && tolerance < 1)) {                       // Use `!` for catching NaN.
                 return super.increment(tolerance);
             }
             int i = array.length;
@@ -728,7 +727,7 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
                             return null;
                         }
                     }
-                    // Do not use the ?: operator below since it casts 'asInt' to Long, which is not wanted.
+                    // Do not use the ?: operator below since it casts `asInt` to Long, which is not wanted.
                     if (isSigned) {
                         return asInt;
                     } else {
@@ -842,8 +841,8 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
         }
 
         /*
-         * Not worth to override 'increment(double)' because the array cannot be long anyway
-         * (except if the increment is zero) and the implicit conversion of 'short' to 'int'
+         * Not worth to override `increment(double)` because the array cannot be long anyway
+         * (except if the increment is zero) and the implicit conversion of `short` to `int`
          * performed by Java would make the implementation a little bit more tricky.
          */
 
@@ -951,8 +950,8 @@ abstract class ArrayVector<E extends Number> extends Vector implements CheckedCo
         }
 
         /*
-         * Not worth to override 'increment(double)' because the array cannot be long anyway
-         * (except if the increment is zero) and the implicit conversion of 'byte' to 'int'
+         * Not worth to override `increment(double)` because the array cannot be long anyway
+         * (except if the increment is zero) and the implicit conversion of `byte` to `int`
          * performed by Java would make the implementation a little bit more tricky.
          */
 
diff --git a/core/sis-utility/src/main/java/org/apache/sis/setup/About.java b/core/sis-utility/src/main/java/org/apache/sis/setup/About.java
index 9feede5beb..7f84dee8cb 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/setup/About.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/setup/About.java
@@ -470,7 +470,7 @@ fill:   for (int i=0; ; i++) {
             if (name == null) {
                 name = resources.getString(nameKey);
             }
-            @SuppressWarnings("null")
+            @SuppressWarnings("null")   // `section` is non-null because of initially non-null `newSection`.
             final TreeTable.Node node = section.newChild();
             node.setValue(NAME, name);
             if (children != null) {
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java
index 6bf8660220..3ef3214f3d 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/DefaultTreeTable.java
@@ -695,7 +695,6 @@ public class DefaultTreeTable implements TreeTable, Cloneable, Serializable {
          * @return {@code true} if the two objects are equal, ignoring the parent node.
          */
         @Override
-        @SuppressWarnings("null")
         public boolean equals(final Object other) {
             if (other == this) {
                 return true;
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java b/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
index 019cf0cf71..8eea14fe63 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
@@ -405,14 +405,13 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
      * @throws ParseException if an error occurred while parsing a node value.
      */
     @Override
-    @SuppressWarnings("null")
     public TreeTable parse(final CharSequence text, final ParsePosition pos) throws ParseException {
         final Matcher matcher   = getColumnSeparatorMatcher(text);
         final int length        = text.length();
         int indexOfLineStart    = pos.getIndex();
-        int indentationLevel    = 0;                // Current index in the 'indentations' array.
+        int indentationLevel    = 0;                // Current index in the `indentations` array.
         int[] indentations      = new int[16];      // Number of spaces (ignoring drawing characters) for each level.
-        TreeTable.Node lastNode = null;             // Last parsed node, having 'indentation[level]' characters before its content.
+        TreeTable.Node lastNode = null;             // Last parsed node, having `indentation[level]` characters before its content.
         TreeTable.Node root     = null;             // First node found while parsing.
         final DefaultTreeTable table = new DefaultTreeTable(columnIndices != null ? columnIndices : TableColumn.NAME_MAP);
         final TableColumn<?>[] columns = DefaultTreeTable.getColumns(table.columnIndices);
@@ -496,7 +495,7 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
                     /*
                      * Lower indentation level: go up in the tree until we find the new parent.
                      * Note that lastNode.getParent() should never return null, since only the
-                     * node at 'indentationLevel == 0' has a null parent and we check that case.
+                     * node at `indentationLevel == 0` has a null parent and we check that case.
                      */
                     if (--indentationLevel < 0) {
                         pos.setErrorIndex(indexOfLineStart);
@@ -715,7 +714,7 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
             final Format format = getFormat(value.getClass());
             if (format instanceof DecimalFormat && Numbers.isFloat(value.getClass())) {
                 final double number = ((Number) value).doubleValue();
-                if (number != (int) number) {   // Cast to 'int' instead of 'long' as a way to limit to about 2E9.
+                if (number != (int) number) {   // Cast to `int` instead of `long` as a way to limit to about 2E9.
                     /*
                      * The default floating point format uses only 3 fraction digits. We adjust that to the number
                      * of digits required by the number to format. We do that only if no NumberFormat was inferred
@@ -810,7 +809,7 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
                     if (needLineSeparator && lineSeparator != null) {
                         setLineSeparator(lineSeparator + getTreeSymbols(true, isLast[level]));
                     }
-                    format(child, level+1);                     // 'isLast' must be set before to call this method.
+                    format(child, level+1);                     // `isLast` must be set before to call this method.
                 }
                 if (lineSeparator != null) {
                     setLineSeparator(lineSeparator);            // Restore previous state.
diff --git a/ide-project/NetBeans/nbproject/cfg_hints.xml b/ide-project/NetBeans/nbproject/cfg_hints.xml
index 4c832fa7d3..bc79ffd6ea 100644
--- a/ide-project/NetBeans/nbproject/cfg_hints.xml
+++ b/ide-project/NetBeans/nbproject/cfg_hints.xml
@@ -157,5 +157,57 @@
             <attribute name="enabled" value="true"/>
             <attribute name="hintSeverity" value="HINT"/>
         </node>
+        <node name="org.netbeans.modules.java.hints.jdk.ConvertToTextBlock">
+            <attribute name="enabled" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.jdk.ConvertTextBlockToString">
+            <attribute name="enabled" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.NoLoggers">
+            <attribute name="custom-loggers" value="false"/>
+            <attribute name="custom-loggers-list" value=""/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintCREATE_FINAL_FIELD_CTOR">
+            <attribute name="create-final-fields-from-ctor" value="true"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintCREATE_LOCAL_VARIABLE">
+            <attribute name="create-local-variables-in-place" value="true"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.jdk.ConvertSwitchToRuleSwitch">
+            <attribute name="enabled" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.jdk.ConvertToNestedRecordPattern">
+            <attribute name="enabled" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.jdk.ConvertToSwitchPatternInstanceOf">
+            <attribute name="enabled" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintSURROUND_WITH_TRY_CATCH">
+            <attribute name="surround-try-catch-rethrow" value="false"/>
+            <attribute name="surround-try-catch-java-util-logging-Logger" value="true"/>
+            <attribute name="surround-try-catch-rethrow-runtime" value="false"/>
+            <attribute name="surround-try-catch-org-openide-util-Exceptions" value="true"/>
+            <attribute name="surround-try-catch-printStackTrace" value="true"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.jdk.ConvertToPatternInstanceOf">
+            <attribute name="enabled" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.jdk.AddUnderscores">
+            <attribute name="size-binary" value="4"/>
+            <attribute name="size-hexadecimal" value="4"/>
+            <attribute name="size-decimal" value="3"/>
+            <attribute name="also-with-underscores" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.jdk.ConvertToRecordPattern">
+            <attribute name="enabled" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintIMPORT_CLASS">
+            <attribute name="organize-import-class" value="false"/>
+        </node>
+        <node name="org.netbeans.modules.java.hints.bugs.NPECheck">
+            <attribute name="unboxing-unknown" value="true"/>
+            <attribute name="enable-for-fields" value="false"/>
+            <attribute name="enabled" value="false"/>
+        </node>
     </tool>
 </configuration>
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
index cfcfdbf994..58b39d3af4 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
@@ -464,7 +464,6 @@ final class CRSBuilder extends ReferencingFactoryContainer {
      * @throws ClassCastException if an object defined by an EPSG code is not of the expected type.
      * @throws FactoryException if an error occurred during objects creation with the factories.
      */
-    @SuppressWarnings("null")
     public CoordinateReferenceSystem build(final GeoKeysLoader source) throws FactoryException {
         try {
             source.logger = this;
@@ -491,7 +490,7 @@ final class CRSBuilder extends ReferencingFactoryContainer {
             default: invalidValue(GeoKeys.RasterType, code); break;
         }
         /*
-         * First create the main coordinate reference system, as determined by 'ModelType'.
+         * First create the main coordinate reference system, as determined by `ModelType`.
          * Then if a vertical CRS exists and the main CRS is not geocentric (in which case
          * adding a vertical CRS would make no sense), create a three-dimensional compound CRS.
          */
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
index 10be35c10f..e29dc154d8 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
@@ -452,7 +452,6 @@ public final class DecoderWrapper extends Decoder implements CancelTask {
      * @throws DataStoreException if the library of geometric objects is not available.
      */
     @Override
-    @SuppressWarnings("null")
     public DiscreteSampling[] getDiscreteSampling(final DataStore lock) throws IOException, DataStoreException {
         final FeatureDataset features = getFeatureDataSet();
         if (features instanceof FeatureDatasetPoint) {
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
index 28b6494e55..4962e1122e 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -868,7 +868,6 @@ split:  while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
      * Adds information about all netCDF variables. This is the {@code <mdb:contentInfo>} element in XML.
      * This method groups variables by their domains, i.e. variables having the same set of axes are grouped together.
      */
-    @SuppressWarnings("null")
     private void addContentInfo() {
         /*
          * Prepare a list of features and coverages, but without writing metadata now.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
index 79b018cf20..5ccaaabd59 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
@@ -311,7 +311,7 @@ search:     for (int ci=0; ci < categories.length; ci++) {
             }
         }
         if (open && selected == null) {
-            @SuppressWarnings("null")
+            @SuppressWarnings("null")                       // `connector` is null only if `selected` is non-null.
             final String name = connector.getStorageName();
             throw new UnsupportedStorageException(null, Resources.Keys.UnknownFormatFor_1, name);
         }
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
index 4141179c0a..9fcb237b2a 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
@@ -1538,7 +1538,6 @@ public class StorageConnector implements Serializable {
          */
         final Map<AutoCloseable,Boolean> toClose = new IdentityHashMap<>(views.size());
         for (Coupled c : views.values()) {
-            @SuppressWarnings("null")
             Object v = c.view;
             if (v != view) {
                 if (v instanceof AutoCloseable) {