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

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 8f78934a1e97bb087d7b67179ca51d6a0bd66a61
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sat May 23 18:27:06 2026 -0400

    Cleanup: Util.nullSafeEquals is deprecated in favor of plain Java 
alternatives
---
 .../project/validation/ObjEntityValidator.java     |  3 ++-
 .../src/main/java/org/apache/cayenne/DataRow.java  |  4 ++--
 .../java/org/apache/cayenne/ObjectIdCompound.java  |  6 +++---
 .../java/org/apache/cayenne/ObjectIdSingle.java    |  6 +++---
 .../cayenne/access/IncrementalFaultList.java       |  6 +++---
 .../access/MixedResultIncrementalFaultList.java    |  4 ++--
 .../java/org/apache/cayenne/access/ObjectDiff.java |  4 ++--
 .../access/translator/ejbql/EJBQLTableId.java      |  6 +++---
 .../java/org/apache/cayenne/exp/Expression.java    |  5 +++--
 .../apache/cayenne/exp/ExpressionParameter.java    |  4 +---
 .../cayenne/graph/NodePropertyChangeOperation.java |  4 ++--
 .../main/java/org/apache/cayenne/map/DataMap.java  |  5 +++--
 .../main/java/org/apache/cayenne/map/DbEntity.java |  7 ++++---
 .../org/apache/cayenne/map/DbRelationship.java     |  6 +++---
 .../org/apache/cayenne/map/ObjRelationship.java    |  7 ++++---
 .../org/apache/cayenne/query/ObjectIdQuery.java    |  4 +++-
 .../java/org/apache/cayenne/query/Ordering.java    |  7 ++++---
 .../org/apache/cayenne/reflect/EnumConverter.java  |  4 ++--
 .../apache/cayenne/reflect/PropertyDescriptor.java |  6 +++---
 .../main/java/org/apache/cayenne/util/Util.java    | 22 ++++++----------------
 .../cayenne/validation/ValidationResult.java       |  7 +++----
 .../java/org/apache/cayenne/util/UtilTest.java     |  1 +
 .../modeler/pref/dbconnector/DBConnector.java      | 20 ++++++++++----------
 .../cayenne/modeler/event/model/ModelEvent.java    |  4 ++--
 .../apache/cayenne/modeler/toolkit/AppAction.java  |  4 ++--
 .../modeler/toolkit/table/CMTableModel.java        |  4 ++--
 .../modeler/ui/action/MultipleObjectsAction.java   |  4 ++--
 .../ui/dbrelationship/DbRelationshipDialog.java    |  6 +++---
 .../editor/datadomain/main/DataDomainMainView.java |  6 +++---
 .../editor/datamap/main/DataMapMainView.java       | 12 ++++++------
 .../datamap/main/catalog/CatalogUpdateDialog.java  |  5 +++--
 .../datamap/main/pkg/PackageUpdateDialog.java      |  3 ++-
 .../datamap/main/schema/SchemaUpdateDialog.java    |  5 +++--
 .../main/superclass/SuperclassUpdateDialog.java    |  3 ++-
 .../project/editor/datanode/DataSourcePanel.java   |  4 ++--
 .../editor/dbentity/main/DbEntityMainView.java     | 12 ++++++------
 .../main/PKCustomSequenceGeneratorPanel.java       |  6 +++---
 .../dbentity/properties/DbAttributeTableModel.java |  4 ++--
 .../properties/DbRelationshipTableModel.java       |  4 ++--
 .../attributes/EmbeddableAttributeTableModel.java  |  4 ++--
 .../editor/embeddable/main/EmbeddableMainView.java |  4 ++--
 .../editor/objentity/main/ObjEntityMainView.java   | 12 ++++++------
 .../properties/ObjAttributeTableModel.java         |  3 ++-
 .../relinfo/ObjRelationshipInfoDialog.java         |  9 ++++-----
 .../procedure/ProcedureParameterTableModel.java    |  4 ++--
 .../editor/procedure/ProcedureQueryView.java       |  4 ++--
 .../ui/project/editor/procedure/ProcedureTab.java  |  8 ++++----
 .../ui/project/editor/query/BaseQueryMainTab.java  |  4 ++--
 .../editor/query/SelectPropertiesPanel.java        |  3 ++-
 .../editor/query/ejbql/EjbqlQueryMainTab.java      |  4 ++--
 .../editor/query/ejbql/EjbqlQueryScriptsTab.java   |  4 ++--
 .../query/selectquery/SelectQueryMainTab.java      |  4 ++--
 .../query/sqltemplate/SQLTemplateScriptsTab.java   |  6 +++---
 53 files changed, 154 insertions(+), 153 deletions(-)

diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjEntityValidator.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjEntityValidator.java
index fca41fcc7..b44445241 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjEntityValidator.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ObjEntityValidator.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.util.Util;
 import org.apache.cayenne.validation.ValidationResult;
 
+import java.util.Objects;
 import java.util.function.Supplier;
 
 class ObjEntityValidator extends ConfigurationNodeValidator<ObjEntity> {
@@ -85,7 +86,7 @@ class ObjEntityValidator extends 
ConfigurationNodeValidator<ObjEntity> {
 
             ObjEntity conflictingEntity = nextMap.getObjEntity(name);
             if (conflictingEntity != null
-                    && !Util.nullSafeEquals(conflictingEntity.getClassName(), 
entity.getClassName())) {
+                    && !Objects.equals(conflictingEntity.getClassName(), 
entity.getClassName())) {
                 addFailure(validationResult, entity, "Duplicate ObjEntity name 
in another DataMap: '%s'", name);
                 break;
             }
diff --git a/cayenne/src/main/java/org/apache/cayenne/DataRow.java 
b/cayenne/src/main/java/org/apache/cayenne/DataRow.java
index c411b4221..b243832fe 100644
--- a/cayenne/src/main/java/org/apache/cayenne/DataRow.java
+++ b/cayenne/src/main/java/org/apache/cayenne/DataRow.java
@@ -21,11 +21,11 @@ package org.apache.cayenne;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.util.ToStringBuilder;
-import org.apache.cayenne.util.Util;
 
 /**
  * DataRow a map that holds values retrieved from the database for a given 
query row.
@@ -102,7 +102,7 @@ public class DataRow extends HashMap<String, Object> {
             Object currentValue = entry.getValue();
             Object rowValue = row.get(key);
 
-            if (!Util.nullSafeEquals(currentValue, rowValue)) {
+            if (!Objects.deepEquals(currentValue, rowValue)) {
                 if (diff == null) {
                     diff = new DataRow(this.size());
                 }
diff --git a/cayenne/src/main/java/org/apache/cayenne/ObjectIdCompound.java 
b/cayenne/src/main/java/org/apache/cayenne/ObjectIdCompound.java
index 50db67120..15614437a 100644
--- a/cayenne/src/main/java/org/apache/cayenne/ObjectIdCompound.java
+++ b/cayenne/src/main/java/org/apache/cayenne/ObjectIdCompound.java
@@ -20,7 +20,7 @@
 package org.apache.cayenne;
 
 import org.apache.cayenne.util.HashCodeBuilder;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -127,7 +127,7 @@ class ObjectIdCompound implements ObjectId {
                }
 
                ObjectIdCompound id = (ObjectIdCompound) object;
-               if (!Util.nullSafeEquals(entityName, id.entityName)) {
+               if (!Objects.equals(entityName, id.entityName)) {
                        return false;
                }
 
@@ -163,7 +163,7 @@ class ObjectIdCompound implements ObjectId {
                        return o2 instanceof Number n2 && n1.longValue() == 
n2.longValue();
                }
 
-               return Util.nullSafeEquals(o1, o2);
+               return Objects.deepEquals(o1, o2);
        }
 
        @Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/ObjectIdSingle.java 
b/cayenne/src/main/java/org/apache/cayenne/ObjectIdSingle.java
index a239e5e0c..ee0df252e 100644
--- a/cayenne/src/main/java/org/apache/cayenne/ObjectIdSingle.java
+++ b/cayenne/src/main/java/org/apache/cayenne/ObjectIdSingle.java
@@ -24,7 +24,7 @@ import java.util.Map;
 
 import org.apache.cayenne.util.HashCodeBuilder;
 import org.apache.cayenne.util.SingleEntryMap;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 /**
  * {@link ObjectId} with single non-numeric value
@@ -116,10 +116,10 @@ class ObjectIdSingle implements ObjectId {
             return false;
         }
         ObjectIdSingle that = (ObjectIdSingle) o;
-        if(!Util.nullSafeEquals(entityName, that.entityName)) {
+        if(!Objects.equals(entityName, that.entityName)) {
             return false;
         }
-        return Util.nullSafeEquals(value, that.value);
+        return Objects.deepEquals(value, that.value);
     }
 
     @Override
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java 
b/cayenne/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java
index ce4d7bdcf..e0749d7cc 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java
@@ -27,7 +27,7 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.query.ObjectSelect;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -807,7 +807,7 @@ public class IncrementalFaultList<E> implements List<E>, 
Serializable {
                                for (Map.Entry<?, ?> entry : id.entrySet()) {
                                        Object key = entry.getKey();
                                        Object value = entry.getValue();
-                                       if (!Util.nullSafeEquals(value, 
map.get(key))) {
+                                       if (!Objects.deepEquals(value, 
map.get(key))) {
                                                return false;
                                        }
                                }
@@ -831,7 +831,7 @@ public class IncrementalFaultList<E> implements List<E>, 
Serializable {
                        for (Map.Entry<?, ?> entry : id.entrySet()) {
                                Object key = entry.getKey();
                                Object value = entry.getValue();
-                               if (!Util.nullSafeEquals(value, map.get(key))) {
+                               if (!Objects.deepEquals(value, map.get(key))) {
                                        return false;
                                }
                        }
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java
 
b/cayenne/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java
index c2a0d2582..d33261988 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java
@@ -36,7 +36,7 @@ import org.apache.cayenne.query.EntityResultSegment;
 import org.apache.cayenne.query.ObjectSelect;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 /**
  * FaultList that is used for paginated {@link ColumnSelect} queries.
@@ -219,7 +219,7 @@ class MixedResultIncrementalFaultList<E> extends 
IncrementalFaultList<E> {
                 }
 
                 for (Map.Entry<?, ?> entry : id.entrySet()) {
-                    if (!Util.nullSafeEquals(entry.getValue(), 
map.get(entry.getKey()))) {
+                    if (!Objects.deepEquals(entry.getValue(), 
map.get(entry.getKey()))) {
                         return false;
                     }
                 }
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/ObjectDiff.java 
b/cayenne/src/main/java/org/apache/cayenne/access/ObjectDiff.java
index a2ba349e7..d05939f63 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/ObjectDiff.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/ObjectDiff.java
@@ -40,7 +40,7 @@ import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.PropertyVisitor;
 import org.apache.cayenne.reflect.ToManyProperty;
 import org.apache.cayenne.reflect.ToOneProperty;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -491,7 +491,7 @@ public class ObjectDiff extends NodeDiff {
             if (!(object instanceof ArcOperation other)) {
                 return false;
             }
-            return arcId.equals(other.arcId) && 
Util.nullSafeEquals(targetNodeId, other.targetNodeId);
+            return arcId.equals(other.arcId) && Objects.equals(targetNodeId, 
other.targetNodeId);
         }
 
         @Override
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTableId.java
 
b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTableId.java
index 9f3b2a3c9..4f7009025 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTableId.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLTableId.java
@@ -19,11 +19,11 @@
 package org.apache.cayenne.access.translator.ejbql;
 
 import java.util.Iterator;
+import java.util.Objects;
 
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.reflect.ClassDescriptor;
-import org.apache.cayenne.util.Util;
 
 /**
  * A helper class representing an "id" of a database table during EJBQL 
translation. EJBQL
@@ -126,11 +126,11 @@ class EJBQLTableId {
 
         EJBQLTableId id = (EJBQLTableId) object;
 
-        if (!Util.nullSafeEquals(entityId, id.entityId)) {
+        if (!Objects.equals(entityId, id.entityId)) {
             return false;
         }
 
-        if (!Util.nullSafeEquals(dbPath, id.dbPath)) {
+        if (!Objects.equals(dbPath, id.dbPath)) {
             return false;
         }
 
diff --git a/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java 
b/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java
index 5b845ab14..6f25938b0 100644
--- a/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java
+++ b/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java
@@ -33,8 +33,9 @@ import 
org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.exp.parser.ASTScalar;
 import org.apache.cayenne.util.ConversionUtil;
 import org.apache.cayenne.util.HashCodeBuilder;
-import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
+
+import java.util.Objects;
 import org.apache.cayenne.util.XMLSerializable;
 
 /**
@@ -285,7 +286,7 @@ public abstract class Expression implements Serializable, 
XMLSerializable {
                // compare operands
                int len = e.getOperandCount();
                for (int i = 0; i < len; i++) {
-                       if (!Util.nullSafeEquals(e.getOperand(i), 
getOperand(i))) {
+                       if (!Objects.deepEquals(e.getOperand(i), 
getOperand(i))) {
                                return false;
                        }
                }
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/exp/ExpressionParameter.java 
b/cayenne/src/main/java/org/apache/cayenne/exp/ExpressionParameter.java
index 73136b70a..0c887a0e7 100644
--- a/cayenne/src/main/java/org/apache/cayenne/exp/ExpressionParameter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/exp/ExpressionParameter.java
@@ -19,8 +19,6 @@
 
 package org.apache.cayenne.exp;
 
-import org.apache.cayenne.util.Util;
-
 import java.io.Serializable;
 import java.util.Objects;
 
@@ -59,7 +57,7 @@ public class ExpressionParameter implements Serializable {
                }
 
                ExpressionParameter parameter = (ExpressionParameter) o;
-               return Util.nullSafeEquals(name, parameter.name);
+               return Objects.equals(name, parameter.name);
        }
 
        @Override
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/graph/NodePropertyChangeOperation.java
 
b/cayenne/src/main/java/org/apache/cayenne/graph/NodePropertyChangeOperation.java
index 286a3140a..9d968495c 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/graph/NodePropertyChangeOperation.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/graph/NodePropertyChangeOperation.java
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.graph;
 
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 /**
  * @since 1.2
@@ -69,7 +69,7 @@ public class NodePropertyChangeOperation extends NodeDiff {
         */
        @Override
        public boolean isNoop() {
-               return Util.nullSafeEquals(oldValue, newValue);
+               return Objects.deepEquals(oldValue, newValue);
        }
 
        @Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/map/DataMap.java 
b/cayenne/src/main/java/org/apache/cayenne/map/DataMap.java
index 706a22438..d113b21b9 100644
--- a/cayenne/src/main/java/org/apache/cayenne/map/DataMap.java
+++ b/cayenne/src/main/java/org/apache/cayenne/map/DataMap.java
@@ -37,6 +37,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.TreeMap;
 
 import static java.util.Collections.emptyList;
@@ -590,7 +591,7 @@ public class DataMap implements Serializable, 
ConfigurationNode, XMLSerializable
                        throw new NullPointerException("Null entity or name");
                }
                String oldName = entity.getName();
-               if (Util.nullSafeEquals(oldName, newName)) {
+               if (Objects.equals(oldName, newName)) {
                        return;
                }
                if (dbEntityMap.get(oldName) != entity) {
@@ -619,7 +620,7 @@ public class DataMap implements Serializable, 
ConfigurationNode, XMLSerializable
                        throw new NullPointerException("Null entity or name");
                }
                String oldName = entity.getName();
-               if (Util.nullSafeEquals(oldName, newName)) {
+               if (Objects.equals(oldName, newName)) {
                        return;
                }
                if (objEntityMap.get(oldName) != entity) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/map/DbEntity.java 
b/cayenne/src/main/java/org/apache/cayenne/map/DbEntity.java
index ff47d6281..dd7ee1e16 100644
--- a/cayenne/src/main/java/org/apache/cayenne/map/DbEntity.java
+++ b/cayenne/src/main/java/org/apache/cayenne/map/DbEntity.java
@@ -39,9 +39,10 @@ import org.apache.cayenne.exp.ExpressionException;
 import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.exp.path.CayennePath;
 import org.apache.cayenne.util.CayenneMapEntry;
-import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
 
+import java.util.Objects;
+
 /**
  * A DbEntity is a mapping descriptor that defines a structure of a database
  * table.
@@ -292,7 +293,7 @@ public class DbEntity extends Entity<DbEntity, DbAttribute, 
DbRelationship>
         }
 
         String oldName = attr.getName();
-        if (Util.nullSafeEquals(oldName, newName)) {
+        if (Objects.equals(oldName, newName)) {
             return;
         }
 
@@ -339,7 +340,7 @@ public class DbEntity extends Entity<DbEntity, DbAttribute, 
DbRelationship>
         }
 
         String oldName = rel.getName();
-        if (Util.nullSafeEquals(oldName, newName)) {
+        if (Objects.equals(oldName, newName)) {
             return;
         }
 
diff --git a/cayenne/src/main/java/org/apache/cayenne/map/DbRelationship.java 
b/cayenne/src/main/java/org/apache/cayenne/map/DbRelationship.java
index 15145ca72..5db9010cb 100644
--- a/cayenne/src/main/java/org/apache/cayenne/map/DbRelationship.java
+++ b/cayenne/src/main/java/org/apache/cayenne/map/DbRelationship.java
@@ -22,10 +22,10 @@ package org.apache.cayenne.map;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
-import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
 
 import java.util.ArrayList;
+import java.util.Objects;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -507,8 +507,8 @@ public class DbRelationship extends Relationship<DbEntity, 
DbAttribute, DbRelati
             }
 
             DbJoin j = (DbJoin) o;
-            return j.relationship == this.relationship && 
Util.nullSafeEquals(j.sourceName, this.sourceName)
-                    && Util.nullSafeEquals(j.targetName, this.targetName);
+            return j.relationship == this.relationship && 
Objects.equals(j.sourceName, this.sourceName)
+                    && Objects.equals(j.targetName, this.targetName);
         }
     }
 
diff --git a/cayenne/src/main/java/org/apache/cayenne/map/ObjRelationship.java 
b/cayenne/src/main/java/org/apache/cayenne/map/ObjRelationship.java
index 54b8763fa..c95437585 100644
--- a/cayenne/src/main/java/org/apache/cayenne/map/ObjRelationship.java
+++ b/cayenne/src/main/java/org/apache/cayenne/map/ObjRelationship.java
@@ -33,9 +33,10 @@ import org.apache.cayenne.exp.parser.ASTDbPath;
 import org.apache.cayenne.exp.path.CayennePath;
 import org.apache.cayenne.util.CayenneMapEntry;
 import org.apache.cayenne.util.ToStringBuilder;
-import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
 
+import java.util.Objects;
+
 /**
  * Describes an association between two Java classes mapped as source and 
target
  * ObjEntity. Maps to a path of DbRelationships.
@@ -542,7 +543,7 @@ public class ObjRelationship extends 
Relationship<ObjEntity, ObjAttribute, ObjRe
      * @since 5.0
      */
     public void setDbRelationshipPath(CayennePath relationshipPath) {
-        if (!Util.nullSafeEquals(getDbRelationshipPath(), relationshipPath)) {
+        if (!Objects.equals(getDbRelationshipPath(), relationshipPath)) {
             refreshFromPath(relationshipPath, false);
         }
     }
@@ -556,7 +557,7 @@ public class ObjRelationship extends 
Relationship<ObjEntity, ObjAttribute, ObjRe
      */
     public void setDeferredDbRelationshipPath(String relationshipPath) {
         CayennePath newPath = CayennePath.of(relationshipPath);
-        if (!Util.nullSafeEquals(getDbRelationshipPath(), newPath)) {
+        if (!Objects.equals(getDbRelationshipPath(), newPath)) {
             deferredPath = newPath;
         }
     }
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java 
b/cayenne/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java
index d78d58c11..5ed7f58dd 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java
@@ -29,6 +29,8 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.util.Util;
 
+import java.util.Objects;
+
 /**
  * A query that matches zero or one object or data row corresponding to the 
ObjectId. Used
  * internally by Cayenne to lookup objects by id. Notice that cache policies of
@@ -175,7 +177,7 @@ public class ObjectIdQuery extends IndirectQuery {
 
         ObjectIdQuery query = (ObjectIdQuery) object;
 
-        return Util.nullSafeEquals(objectId, query.getObjectId());
+        return Objects.equals(objectId, query.getObjectId());
     }
 
     /**
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/Ordering.java 
b/cayenne/src/main/java/org/apache/cayenne/query/Ordering.java
index 9cb90451d..04ed7c14d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/Ordering.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/Ordering.java
@@ -35,8 +35,9 @@ import org.apache.cayenne.exp.ExpressionException;
 import org.apache.cayenne.exp.parser.ASTDbPath;
 import org.apache.cayenne.exp.parser.ASTObjPath;
 import org.apache.cayenne.util.ConversionUtil;
-import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
+
+import java.util.Objects;
 import org.apache.cayenne.util.XMLSerializable;
 
 /**
@@ -144,7 +145,7 @@ public class Ordering implements Comparator<Object>, 
Serializable, XMLSerializab
 
                Ordering o = (Ordering) object;
 
-               if (!Util.nullSafeEquals(sortSpecString, o.sortSpecString)) {
+               if (!Objects.equals(sortSpecString, o.sortSpecString)) {
                        return false;
                }
 
@@ -178,7 +179,7 @@ public class Ordering implements Comparator<Object>, 
Serializable, XMLSerializab
         * @since 1.1
         */
        public void setSortSpecString(String sortSpecString) {
-               if (!Util.nullSafeEquals(this.sortSpecString, sortSpecString)) {
+               if (!Objects.equals(this.sortSpecString, sortSpecString)) {
                        this.sortSpecString = sortSpecString;
                        this.sortSpec = null;
                }
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/reflect/EnumConverter.java 
b/cayenne/src/main/java/org/apache/cayenne/reflect/EnumConverter.java
index ebb419451..6bc4fe0ce 100644
--- a/cayenne/src/main/java/org/apache/cayenne/reflect/EnumConverter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/reflect/EnumConverter.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.reflect;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ExtendedEnumeration;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 /**
  * @since 1.2
@@ -44,7 +44,7 @@ class EnumConverter<T extends Enum<T> & ExtendedEnumeration> 
implements Converte
             }
 
             for (ExtendedEnumeration en : values) {
-                if (Util.nullSafeEquals(en.getDatabaseValue(), object)) {
+                if (Objects.deepEquals(en.getDatabaseValue(), object)) {
                     return (T) en;
                 }
             }
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/reflect/PropertyDescriptor.java 
b/cayenne/src/main/java/org/apache/cayenne/reflect/PropertyDescriptor.java
index 90799a775..5194702f5 100644
--- a/cayenne/src/main/java/org/apache/cayenne/reflect/PropertyDescriptor.java
+++ b/cayenne/src/main/java/org/apache/cayenne/reflect/PropertyDescriptor.java
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.reflect;
 
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 /**
  * Defines bean property API used by Cayenne to access object data, do faulting
@@ -80,7 +80,7 @@ public interface PropertyDescriptor {
     /**
      * Allows to use special logic to compare values for equality
      * as in rare cases it is not sufficient to use the default equals() 
method.
-     * Default implementation uses {@link Util#nullSafeEquals(Object, Object)} 
method.
+     * Default implementation uses {@link Objects#deepEquals(Object, Object)}.
      *
      * @param value1 to compare
      * @param value2 to compare
@@ -89,7 +89,7 @@ public interface PropertyDescriptor {
      * @since 4.2
      */
     default boolean equals(Object value1, Object value2) {
-        return Util.nullSafeEquals(value1, value2);
+        return Objects.deepEquals(value1, value2);
     }
 
 }
diff --git a/cayenne/src/main/java/org/apache/cayenne/util/Util.java 
b/cayenne/src/main/java/org/apache/cayenne/util/Util.java
index fe40a8b74..07a8be4e9 100644
--- a/cayenne/src/main/java/org/apache/cayenne/util/Util.java
+++ b/cayenne/src/main/java/org/apache/cayenne/util/Util.java
@@ -66,6 +66,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.StringTokenizer;
 import java.util.regex.Pattern;
 
@@ -193,24 +194,13 @@ public class Util {
         * Compares two objects similar to "Object.equals(Object)". Unlike
         * Object.equals(..), this method doesn't throw an exception if any of 
the
         * two objects is null.
+        *
+        * @deprecated Use {@link Objects#equals(Object, Object)} for non-array 
types,
+        *             or {@link Objects#deepEquals(Object, Object)} when the 
values may be arrays.
         */
+       @Deprecated(since = "5.0", forRemoval = true)
        public static boolean nullSafeEquals(Object o1, Object o2) {
-
-               if (o1 == null) {
-                       return o2 == null;
-               }
-
-               // Arrays must be handled differently since equals() only does
-               // an "==" for an array and ignores equivalence. If an array, 
use
-               // the Jakarta Commons Language component EqualsBuilder to 
determine
-               // the types contained in the array and do individual 
comparisons.
-               if (o1.getClass().isArray()) {
-                       EqualsBuilder builder = new EqualsBuilder();
-                       builder.append(o1, o2);
-                       return builder.isEquals();
-               } else { // It is NOT an array, so use regular equals()
-                       return o1.equals(o2);
-        }
+               return Objects.deepEquals(o1, o2);
        }
 
        /**
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/validation/ValidationResult.java 
b/cayenne/src/main/java/org/apache/cayenne/validation/ValidationResult.java
index 3d822759a..b5f723c5d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/validation/ValidationResult.java
+++ b/cayenne/src/main/java/org/apache/cayenne/validation/ValidationResult.java
@@ -19,10 +19,9 @@
 
 package org.apache.cayenne.validation;
 
-import org.apache.cayenne.util.Util;
-
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Objects;
 import java.util.Collections;
 import java.util.List;
 
@@ -72,7 +71,7 @@ public class ValidationResult implements Serializable {
     public List<ValidationFailure> getFailures(Object source) {
         ArrayList<ValidationFailure> matchingFailures = new ArrayList<>(5);
         for (ValidationFailure failure : failures) {
-            if (Util.nullSafeEquals(source, failure.getSource())) {
+            if (Objects.equals(source, failure.getSource())) {
                 matchingFailures.add(failure);
             }
         }
@@ -95,7 +94,7 @@ public class ValidationResult implements Serializable {
      */
     public boolean hasFailures(Object source) {
         for (ValidationFailure failure : failures) {
-            if (Util.nullSafeEquals(source, failure.getSource())) {
+            if (Objects.equals(source, failure.getSource())) {
                 return true;
             }
         }
diff --git a/cayenne/src/test/java/org/apache/cayenne/util/UtilTest.java 
b/cayenne/src/test/java/org/apache/cayenne/util/UtilTest.java
index 71f8b79f7..b74086992 100644
--- a/cayenne/src/test/java/org/apache/cayenne/util/UtilTest.java
+++ b/cayenne/src/test/java/org/apache/cayenne/util/UtilTest.java
@@ -166,6 +166,7 @@ public class UtilTest {
        }
 
        @Test
+       @SuppressWarnings("deprecation")
        public void nullSafeEquals() throws Exception {
                // need a special subclass of Object to make "clone" method 
public
                class CloneableObject implements Cloneable {
diff --git 
a/modeler/cayenne-modeler-prefs/src/main/java/org/apache/cayenne/modeler/pref/dbconnector/DBConnector.java
 
b/modeler/cayenne-modeler-prefs/src/main/java/org/apache/cayenne/modeler/pref/dbconnector/DBConnector.java
index b11b0eab7..3b6acb4e6 100644
--- 
a/modeler/cayenne-modeler-prefs/src/main/java/org/apache/cayenne/modeler/pref/dbconnector/DBConnector.java
+++ 
b/modeler/cayenne-modeler-prefs/src/main/java/org/apache/cayenne/modeler/pref/dbconnector/DBConnector.java
@@ -20,7 +20,7 @@
 package org.apache.cayenne.modeler.pref.dbconnector;
 
 import org.apache.cayenne.configuration.DataSourceDescriptor;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 /**
  * Configuration record for a named database connection profile stored in user 
preferences.
@@ -89,27 +89,27 @@ public class DBConnector {
     public boolean copyTo(DBConnector connector) {
         boolean updated = false;
 
-        if (!Util.nullSafeEquals(connector.getUrl(), getUrl())) {
+        if (!Objects.equals(connector.getUrl(), getUrl())) {
             connector.setUrl(getUrl());
             updated = true;
         }
 
-        if (!Util.nullSafeEquals(connector.getUserName(), getUserName())) {
+        if (!Objects.equals(connector.getUserName(), getUserName())) {
             connector.setUserName(getUserName());
             updated = true;
         }
 
-        if (!Util.nullSafeEquals(connector.getPassword(), getPassword())) {
+        if (!Objects.equals(connector.getPassword(), getPassword())) {
             connector.setPassword(getPassword());
             updated = true;
         }
 
-        if (!Util.nullSafeEquals(connector.getJdbcDriver(), getJdbcDriver())) {
+        if (!Objects.equals(connector.getJdbcDriver(), getJdbcDriver())) {
             connector.setJdbcDriver(getJdbcDriver());
             updated = true;
         }
 
-        if (!Util.nullSafeEquals(connector.getDbAdapter(), getDbAdapter())) {
+        if (!Objects.equals(connector.getDbAdapter(), getDbAdapter())) {
             connector.setDbAdapter(getDbAdapter());
             updated = true;
         }
@@ -124,22 +124,22 @@ public class DBConnector {
     public boolean copyTo(final DataSourceDescriptor dataSourceInfo) {
         boolean updated = false;
 
-        if (!Util.nullSafeEquals(dataSourceInfo.getDataSourceUrl(), getUrl())) 
{
+        if (!Objects.equals(dataSourceInfo.getDataSourceUrl(), getUrl())) {
             dataSourceInfo.setDataSourceUrl(getUrl());
             updated = true;
         }
 
-        if (!Util.nullSafeEquals(dataSourceInfo.getUserName(), getUserName())) 
{
+        if (!Objects.equals(dataSourceInfo.getUserName(), getUserName())) {
             dataSourceInfo.setUserName(getUserName());
             updated = true;
         }
 
-        if (!Util.nullSafeEquals(dataSourceInfo.getPassword(), getPassword())) 
{
+        if (!Objects.equals(dataSourceInfo.getPassword(), getPassword())) {
             dataSourceInfo.setPassword(getPassword());
             updated = true;
         }
 
-        if (!Util.nullSafeEquals(dataSourceInfo.getJdbcDriver(), 
getJdbcDriver())) {
+        if (!Objects.equals(dataSourceInfo.getJdbcDriver(), getJdbcDriver())) {
             dataSourceInfo.setJdbcDriver(getJdbcDriver());
             updated = true;
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/model/ModelEvent.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/model/ModelEvent.java
index 529926bf0..047b52622 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/model/ModelEvent.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/model/ModelEvent.java
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.modeler.event.model;
 
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.util.EventObject;
 
@@ -60,7 +60,7 @@ public abstract class ModelEvent extends EventObject {
     }
 
     public boolean isNameChange() {
-        return oldName != null && !Util.nullSafeEquals(oldName, getNewName());
+        return oldName != null && !Objects.equals(oldName, getNewName());
     }
 
     /**
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java
index 87d31490a..919e6c444 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
 import org.apache.cayenne.modeler.ui.errors.ErrorDialog;
 import org.apache.cayenne.project.Project;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -81,7 +81,7 @@ public abstract class AppAction extends AbstractAction {
      * action.
      */
     public void setName(String newName) {
-        if (!Util.nullSafeEquals(getValue(Action.NAME), newName)) {
+        if (!Objects.equals(getValue(Action.NAME), newName)) {
             super.putValue(Action.NAME, newName);
         }
     }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java
index efb3af888..5f2fae576 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.modeler.toolkit.table;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.modeler.project.ProjectSession;
-import org.apache.cayenne.util.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,6 +34,7 @@ import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Superclass of CayenneModeler table model classes.
@@ -58,7 +58,7 @@ public abstract class CMTableModel<T> extends 
AbstractTableModel {
         try {
 
             Object oldValue = getValueAt(row, col);
-            if (!Util.nullSafeEquals(newVal, oldValue)) {
+            if (!Objects.deepEquals(newVal, oldValue)) {
                 setUpdatedValueAt(newVal, row, col);
 
                 this.session.app()
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/MultipleObjectsAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/MultipleObjectsAction.java
index da65f8e80..0fb81c70a 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/MultipleObjectsAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/MultipleObjectsAction.java
@@ -18,7 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.ui.action;
 
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import javax.swing.Action;
 
@@ -38,7 +38,7 @@ public interface MultipleObjectsAction extends Action {
 
         String newName = getActionName(selectedObjects > 1);
 
-        if (!Util.nullSafeEquals(getValue(Action.NAME), newName)) {
+        if (!Objects.equals(getValue(Action.NAME), newName)) {
             putValue(Action.NAME, newName);
         }
     }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
index 28bcc3b97..b7e6de15c 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
@@ -44,7 +44,7 @@ import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.modeler.undo.CreateRelationshipUndoableEdit;
 import org.apache.cayenne.modeler.undo.RelationshipUndoableEdit;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import javax.swing.AbstractListModel;
 import javax.swing.ComboBoxModel;
@@ -391,7 +391,7 @@ public class DbRelationshipDialog extends ProjectDialog {
     }
 
     private void handleNameUpdate(DbRelationship rel, String userInputName) {
-        if (Util.nullSafeEquals(rel.getName(), userInputName)) {
+        if (Objects.equals(rel.getName(), userInputName)) {
             return;
         }
 
@@ -400,7 +400,7 @@ public class DbRelationshipDialog extends ProjectDialog {
                 .baseName(userInputName)
                 .name();
 
-        if (Util.nullSafeEquals(sourceEntityName, rel.getName())) {
+        if (Objects.equals(sourceEntityName, rel.getName())) {
             return;
         }
         String oldName = rel.getName();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java
index 38c0fbbdd..112efd8c8 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java
@@ -31,7 +31,7 @@ import org.apache.cayenne.modeler.toolkit.checkbox.CMCheckBox;
 import org.apache.cayenne.modeler.toolkit.text.CMUndoableTextField;
 import org.apache.cayenne.modeler.toolkit.ProjectPanel;
 import org.apache.cayenne.modeler.project.ProjectSession;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -137,7 +137,7 @@ public class DataDomainMainView extends ProjectPanel 
implements DomainDisplayLis
 
         Map<String, String> properties = domain.getProperties();
         String oldValue = properties.get(property);
-        if (!Util.nullSafeEquals(value, oldValue)) {
+        if (!Objects.equals(value, oldValue)) {
             properties.put(property, value);
 
             DomainEvent e = DomainEvent.ofChange(this, domain);
@@ -191,7 +191,7 @@ public class DataDomainMainView extends ProjectPanel 
implements DomainDisplayLis
                 .getFrame().getProjectSession().project()
                 .getRootNode();
 
-        if (Util.nullSafeEquals(dataChannelDescriptor.getName(), newName)) {
+        if (Objects.equals(dataChannelDescriptor.getName(), newName)) {
             return;
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
index e6532de26..19f70f647 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
@@ -41,7 +41,7 @@ import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.pkg.PackageUpda
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.schema.SchemaUpdateDialog;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.main.superclass.SuperclassUpdateDialog;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -234,7 +234,7 @@ public class DataMapMainView extends ProjectPanel {
         }
 
         String oldPackage = dataMap.getDefaultPackage();
-        if (Util.nullSafeEquals(newDefaultPackage, oldPackage)) {
+        if (Objects.equals(newDefaultPackage, oldPackage)) {
             return;
         }
 
@@ -259,7 +259,7 @@ public class DataMapMainView extends ProjectPanel {
         }
 
         String oldCatalog = dataMap.getDefaultCatalog();
-        if (Util.nullSafeEquals(newCatalog, oldCatalog)) {
+        if (Objects.equals(newCatalog, oldCatalog)) {
             return;
         }
 
@@ -279,7 +279,7 @@ public class DataMapMainView extends ProjectPanel {
         }
 
         String oldSchema = dataMap.getDefaultSchema();
-        if (Util.nullSafeEquals(newSchema, oldSchema)) {
+        if (Objects.equals(newSchema, oldSchema)) {
             return;
         }
 
@@ -299,7 +299,7 @@ public class DataMapMainView extends ProjectPanel {
         }
 
         String oldSuperclass = dataMap.getDefaultSuperclass();
-        if (Util.nullSafeEquals(newSuperclass, oldSuperclass)) {
+        if (Objects.equals(newSuperclass, oldSuperclass)) {
             return;
         }
 
@@ -328,7 +328,7 @@ public class DataMapMainView extends ProjectPanel {
                     + "'. Use a different name.");
         }
         String oldName = map.getName();
-        if (Util.nullSafeEquals(newName, oldName)) {
+        if (Objects.equals(newName, oldName)) {
             return;
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/catalog/CatalogUpdateDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/catalog/CatalogUpdateDialog.java
index 9663cab45..beb9beb60 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/catalog/CatalogUpdateDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/catalog/CatalogUpdateDialog.java
@@ -26,6 +26,7 @@ import org.apache.cayenne.modeler.event.model.ProcedureEvent;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.defaults.DefaultsUpdateDialog;
 import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.awt.Window;
 
@@ -45,7 +46,7 @@ public class CatalogUpdateDialog extends DefaultsUpdateDialog 
{
 
         for (DbEntity entity : dataMap.getDbEntities()) {
             if (doAll || Util.isEmptyString(entity.getCatalog())) {
-                if (!Util.nullSafeEquals(defaultCatalog, entity.getCatalog())) 
{
+                if (!Objects.equals(defaultCatalog, entity.getCatalog())) {
                     entity.setCatalog(defaultCatalog);
                     // any way to batch events, a big change will flood the 
app with entity events?
                     session.fireDbEntityEvent(DbEntityEvent.ofChange(this, 
entity));
@@ -55,7 +56,7 @@ public class CatalogUpdateDialog extends DefaultsUpdateDialog 
{
 
         for (Procedure procedure : dataMap.getProcedures()) {
             if (doAll || Util.isEmptyString(procedure.getCatalog())) {
-                if (!Util.nullSafeEquals(defaultCatalog, 
procedure.getCatalog())) {
+                if (!Objects.equals(defaultCatalog, procedure.getCatalog())) {
                     procedure.setCatalog(defaultCatalog);
                     // any way to batch events, a big change will flood the 
app with procedure events?
                     session.fireProcedureEvent(ProcedureEvent.ofChange(this, 
procedure));
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/pkg/PackageUpdateDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/pkg/PackageUpdateDialog.java
index 61e4e83ec..054521c03 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/pkg/PackageUpdateDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/pkg/PackageUpdateDialog.java
@@ -30,6 +30,7 @@ import org.apache.cayenne.modeler.event.model.ObjEntityEvent;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.defaults.DefaultsUpdateDialog;
 import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.awt.Window;
 import java.util.ArrayList;
@@ -75,7 +76,7 @@ public class PackageUpdateDialog extends DefaultsUpdateDialog 
{
             if (doAll || Util.isEmptyString(oldName) || oldName.indexOf('.') < 
0) {
                 String className = 
extractClassName(Util.isEmptyString(oldName) ? entity.getName() : oldName);
                 String newName = dataMap.getNameWithDefaultPackage(className);
-                if (!Util.nullSafeEquals(newName, entity.getClassName())) {
+                if (!Objects.equals(newName, entity.getClassName())) {
                     entity.setClassName(newName);
                     session.fireObjEntityEvent(ObjEntityEvent.ofChange(this, 
entity));
                 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/schema/SchemaUpdateDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/schema/SchemaUpdateDialog.java
index 38df7375b..3ddbab8a9 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/schema/SchemaUpdateDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/schema/SchemaUpdateDialog.java
@@ -27,6 +27,7 @@ import org.apache.cayenne.modeler.event.model.ProcedureEvent;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.defaults.DefaultsUpdateDialog;
 import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.awt.Window;
 
@@ -46,7 +47,7 @@ public class SchemaUpdateDialog extends DefaultsUpdateDialog {
 
         for (DbEntity entity : dataMap.getDbEntities()) {
             if (doAll || Util.isEmptyString(entity.getSchema())) {
-                if (!Util.nullSafeEquals(defaultSchema, entity.getSchema())) {
+                if (!Objects.equals(defaultSchema, entity.getSchema())) {
                     entity.setSchema(defaultSchema);
                     session.fireDbEntityEvent(DbEntityEvent.ofChange(this, 
entity));
                 }
@@ -55,7 +56,7 @@ public class SchemaUpdateDialog extends DefaultsUpdateDialog {
 
         for (Procedure procedure : dataMap.getProcedures()) {
             if (doAll || Util.isEmptyString(procedure.getSchema())) {
-                if (!Util.nullSafeEquals(defaultSchema, 
procedure.getSchema())) {
+                if (!Objects.equals(defaultSchema, procedure.getSchema())) {
                     procedure.setSchema(defaultSchema);
                     session.fireProcedureEvent(ProcedureEvent.ofChange(this, 
procedure));
                 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/superclass/SuperclassUpdateDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/superclass/SuperclassUpdateDialog.java
index ea27d3810..4e4b8c7c4 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/superclass/SuperclassUpdateDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/superclass/SuperclassUpdateDialog.java
@@ -25,6 +25,7 @@ import org.apache.cayenne.modeler.project.ProjectSession;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.defaults.DefaultsUpdateDialog;
 import org.apache.cayenne.modeler.project.ProjectComparators;
 import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.awt.Window;
 
@@ -45,7 +46,7 @@ public class SuperclassUpdateDialog extends 
DefaultsUpdateDialog {
         dataMap.getObjEntities().stream()
                 
.sorted(ProjectComparators.forDataMapChildren()).forEach(entity -> {
                     if (doAll || 
Util.isEmptyString(entity.getSuperClassName())) {
-                        if (!Util.nullSafeEquals(defaultSuperclass, 
entity.getSuperClassName())) {
+                        if (!Objects.equals(defaultSuperclass, 
entity.getSuperClassName())) {
                             entity.setSuperClassName(defaultSuperclass);
                             // any way to batch events, a big change will 
flood the app with entity events?
                             
session.fireObjEntityEvent(ObjEntityEvent.ofChange(this, entity));
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataSourcePanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataSourcePanel.java
index db1dbcdca..02c10201d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataSourcePanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataSourcePanel.java
@@ -22,7 +22,7 @@ package org.apache.cayenne.modeler.ui.project.editor.datanode;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.toolkit.AppPanel;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 /**
  * Base for the inner panels of {@link DataNodeEditorPanel} that edit the 
DataSource portion
@@ -44,7 +44,7 @@ public abstract class DataSourcePanel extends AppPanel {
     }
 
     public void setNode(DataNodeDescriptor node) {
-        if (!Util.nullSafeEquals(this.node, node)) {
+        if (!Objects.equals(this.node, node)) {
             this.node = node;
             refreshView();
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
index e522ca5ec..99dd2128c 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
@@ -39,7 +39,7 @@ import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.modeler.ui.project.editor.ExpressionConvertor;
 import 
org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.BorderFactory;
@@ -216,7 +216,7 @@ public class DbEntityMainView extends ProjectPanel 
implements ExistingSelectionP
 
         DbEntity entity = session.getSelectedDbEntity();
 
-        if (entity == null || Util.nullSafeEquals(newName, entity.getName())) {
+        if (entity == null || Objects.equals(newName, entity.getName())) {
             return;
         }
 
@@ -241,7 +241,7 @@ public class DbEntityMainView extends ProjectPanel 
implements ExistingSelectionP
 
         DbEntity ent = session.getSelectedDbEntity();
 
-        if (ent != null && !Util.nullSafeEquals(ent.getCatalog(), text)) {
+        if (ent != null && !Objects.equals(ent.getCatalog(), text)) {
             ent.setCatalog(text);
             session.fireDbEntityEvent(DbEntityEvent.ofChange(this, ent));
         }
@@ -255,7 +255,7 @@ public class DbEntityMainView extends ProjectPanel 
implements ExistingSelectionP
 
         DbEntity ent = session.getSelectedDbEntity();
 
-        if (ent != null && !Util.nullSafeEquals(ent.getSchema(), text)) {
+        if (ent != null && !Objects.equals(ent.getSchema(), text)) {
             ent.setSchema(text);
             session.fireDbEntityEvent(DbEntityEvent.ofChange(this, ent));
         }
@@ -269,10 +269,10 @@ public class DbEntityMainView extends ProjectPanel 
implements ExistingSelectionP
 
         DbEntity ent = session.getSelectedDbEntity();
 
-        if (ent != null && !Util.nullSafeEquals(ent.getQualifier(), 
qualifier)) {
+        if (ent != null && !Objects.equals(ent.getQualifier(), qualifier)) {
             try {
                 String oldQualifier = 
ExpressionConvertor.asString(ent.getQualifier());
-                if (!Util.nullSafeEquals(oldQualifier, qualifier)) {
+                if (!Objects.equals(oldQualifier, qualifier)) {
                     
ent.setQualifier(ExpressionConvertor.fromString(qualifier));
                     session.fireDbEntityEvent(DbEntityEvent.ofChange(this, 
ent));
                 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java
index 382a6d542..690f0b395 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.map.DbKeyGenerator;
 import org.apache.cayenne.modeler.event.model.DbEntityEvent;
 import org.apache.cayenne.modeler.toolkit.text.CMUndoableTextField;
 import org.apache.cayenne.modeler.project.ProjectSession;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -114,7 +114,7 @@ public class PKCustomSequenceGeneratorPanel extends 
PKGeneratorPanel {
         }
 
         DbKeyGenerator generator = 
session.getSelectedDbEntity().getPrimaryKeyGenerator();
-        if (!Util.nullSafeEquals(generator.getKeyCacheSize(), cacheSize)) {
+        if (!Objects.equals(generator.getKeyCacheSize(), cacheSize)) {
             generator.setKeyCacheSize(cacheSize);
             session.fireDbEntityEvent(DbEntityEvent.ofChange(this, 
generator.getDbEntity()));
         }
@@ -132,7 +132,7 @@ public class PKCustomSequenceGeneratorPanel extends 
PKGeneratorPanel {
         }
 
         DbKeyGenerator generator = 
session.getSelectedDbEntity().getPrimaryKeyGenerator();
-        if (!Util.nullSafeEquals(text, generator.getName())) {
+        if (!Objects.equals(text, generator.getName())) {
             generator.setGeneratorName(text);
             session.fireDbEntityEvent(DbEntityEvent.ofChange(this, 
generator.getDbEntity()));
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributeTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributeTableModel.java
index 654c42149..c726389fa 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributeTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbAttributeTableModel.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.modeler.project.DbAttributeOps;
 import org.apache.cayenne.modeler.toolkit.table.CMTableModel;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import javax.swing.*;
 import java.util.ArrayList;
@@ -170,7 +170,7 @@ public class DbAttributeTableModel extends 
CMTableModel<DbAttribute> {
 
     private String setDbAttributeName(DbAttribute attr, String newName) {
         String oldName = attr.getName();
-        if (Util.nullSafeEquals(newName, oldName)) {
+        if (Objects.equals(newName, oldName)) {
             return null;
         }
         DbEntity parent = attr.getEntity();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipTableModel.java
index 2245937ce..187312737 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/properties/DbRelationshipTableModel.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.modeler.project.DbRelationshipOps;
 import org.apache.cayenne.modeler.toolkit.table.CMTableModel;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import javax.swing.*;
 import java.util.ArrayList;
@@ -138,7 +138,7 @@ public class DbRelationshipTableModel extends 
CMTableModel<DbRelationship> {
         if (column == NAME) {
             String newName = (String) aValue;
             String oldName = rel.getName();
-            if (Util.nullSafeEquals(newName, oldName)) {
+            if (Objects.equals(newName, oldName)) {
                 return;
             }
             DbRelationship clash = entity.getRelationship(newName);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributeTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributeTableModel.java
index a3fc9e319..728b19756 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributeTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/attributes/EmbeddableAttributeTableModel.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.map.EmbeddableAttribute;
 import org.apache.cayenne.modeler.event.model.EmbeddableAttributeEvent;
 import org.apache.cayenne.modeler.toolkit.table.CMTableModel;
 import org.apache.cayenne.modeler.project.ProjectSession;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -63,7 +63,7 @@ public class EmbeddableAttributeTableModel extends 
CMTableModel {
             String oldName = attribute.getName();
             String newName = value != null ? value.toString().trim() : null;
             renamedFrom = oldName;
-            if (!Util.nullSafeEquals(oldName, newName)) {
+            if (!Objects.equals(oldName, newName)) {
                 attribute.setName(newName);
                 if (embeddable != null) {
                     embeddable.removeAttribute(oldName);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java
index a87aaf59e..32ae1e186 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java
@@ -36,7 +36,7 @@ import 
org.apache.cayenne.modeler.event.display.EmbeddableDisplayListener;
 import org.apache.cayenne.modeler.toolkit.text.CMUndoableTextField;
 import org.apache.cayenne.modeler.project.ProjectComparators;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -98,7 +98,7 @@ public class EmbeddableMainView extends ProjectPanel 
implements EmbeddableDispla
             return;
         }
 
-        if (Util.nullSafeEquals(newClassName, embeddable.getClassName())) {
+        if (Objects.equals(newClassName, embeddable.getClassName())) {
             return;
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java
index de2c43a17..4782a8fed 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java
@@ -49,7 +49,7 @@ import 
org.apache.cayenne.modeler.ui.project.editor.objentity.duplicates.Duplica
 import 
org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.modeler.project.ProjectComparators;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -166,7 +166,7 @@ public class ObjEntityMainView extends ProjectPanel 
implements ObjEntityDisplayL
 
             ObjEntity entity = session.getSelectedObjEntity();
 
-            if (!Util.nullSafeEquals(name, entity.getSuperEntityName())) {
+            if (!Objects.equals(name, entity.getSuperEntityName())) {
                 List<ObjAttribute> duplicateAttributes = null;
                 if (name != null) {
                     duplicateAttributes = getDuplicatedAttributes(superEntity);
@@ -312,7 +312,7 @@ public class ObjEntityMainView extends ProjectPanel 
implements ObjEntityDisplayL
         ObjEntity entity = session.getSelectedObjEntity();
 
         // "ent" may be null if we quit editing by changing tree selection
-        if (entity != null && !Util.nullSafeEquals(entity.getClassName(), 
className)) {
+        if (entity != null && !Objects.equals(entity.getClassName(), 
className)) {
             entity.setClassName(className);
             session.fireObjEntityEvent(ObjEntityEvent.ofChange(this, entity));
         }
@@ -326,7 +326,7 @@ public class ObjEntityMainView extends ProjectPanel 
implements ObjEntityDisplayL
 
         ObjEntity ent = session.getSelectedObjEntity();
 
-        if (ent != null && !Util.nullSafeEquals(ent.getSuperClassName(), 
text)) {
+        if (ent != null && !Objects.equals(ent.getSuperClassName(), text)) {
             ent.setSuperClassName(text);
             session.fireObjEntityEvent(ObjEntityEvent.ofChange(this, ent));
         }
@@ -341,7 +341,7 @@ public class ObjEntityMainView extends ProjectPanel 
implements ObjEntityDisplayL
         if (entity != null) {
             try {
                 String oldQualifier = 
ExpressionConvertor.asString(entity.getDeclaredQualifier());
-                if (!Util.nullSafeEquals(oldQualifier, text)) {
+                if (!Objects.equals(oldQualifier, text)) {
                     
entity.setDeclaredQualifier(ExpressionConvertor.fromString(text));
                     session.fireObjEntityEvent(ObjEntityEvent.ofChange(this, 
entity));
                 }
@@ -362,7 +362,7 @@ public class ObjEntityMainView extends ProjectPanel 
implements ObjEntityDisplayL
             return;
         }
 
-        if (Util.nullSafeEquals(newName, entity.getName())) {
+        if (Objects.equals(newName, entity.getName())) {
             return;
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributeTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributeTableModel.java
index 141110b54..27c3c0f21 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributeTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/properties/ObjAttributeTableModel.java
@@ -40,6 +40,7 @@ import org.apache.cayenne.modeler.toolkit.table.CMTableModel;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
 import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -226,7 +227,7 @@ public class ObjAttributeTableModel extends 
CMTableModel<ObjAttribute> {
     private void setObjAttribute(ObjAttribute attribute, Object value) {
         String newName = value != null ? value.toString().trim() : null;
         String oldName = attribute.getName();
-        if (Util.nullSafeEquals(newName, oldName)) {
+        if (Objects.equals(newName, oldName)) {
             return;
         }
         ObjEntity parent = attribute.getEntity();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java
index 094dc6c12..1af631bb9 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java
@@ -45,7 +45,6 @@ import 
org.apache.cayenne.modeler.toolkit.tree.EntityTreeModel;
 import org.apache.cayenne.modeler.toolkit.tree.EntityTreeRelationshipFilter;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
 import org.apache.cayenne.util.DeleteRuleUpdater;
-import org.apache.cayenne.util.Util;
 
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -499,7 +498,7 @@ public class ObjRelationshipInfoDialog extends 
ProjectDialog implements TreeSele
 
         String userInputName = relationshipName.getText();
         String oldName = relationship.getName();
-        if (!Util.nullSafeEquals(oldName, userInputName)) {
+        if (!Objects.equals(oldName, userInputName)) {
             ObjEntity source = relationship.getSourceEntity();
             ObjRelationship clash = source.getRelationship(userInputName);
             if (clash != null && clash != relationship) {
@@ -522,7 +521,7 @@ public class ObjRelationshipInfoDialog extends 
ProjectDialog implements TreeSele
             }
         }
 
-        if (objectTarget == null || 
!Util.nullSafeEquals(objectTarget.getName(), 
relationship.getTargetEntityName())) {
+        if (objectTarget == null || !Objects.equals(objectTarget.getName(), 
relationship.getTargetEntityName())) {
             hasChanges = true;
             // event notification is propagated via the modeler events from 
the caller —
             // the model itself doesn't know about the mediator.
@@ -547,7 +546,7 @@ public class ObjRelationshipInfoDialog extends 
ProjectDialog implements TreeSele
 
         String collectionType = 
ObjRelationship.DEFAULT_COLLECTION_TYPE.equals(targetCollection)
                 || !relationship.isToMany() ? null : targetCollection;
-        if (!Util.nullSafeEquals(collectionType, 
relationship.getCollectionType())) {
+        if (!Objects.equals(collectionType, relationship.getCollectionType())) 
{
             hasChanges = true;
             relationship.setCollectionType(collectionType);
         }
@@ -555,7 +554,7 @@ public class ObjRelationshipInfoDialog extends 
ProjectDialog implements TreeSele
         // map key only makes sense for Map relationships
         String mapKey = COLLECTION_TYPE_MAP.equals(collectionType) && 
!DEFAULT_MAP_KEY.equals(this.mapKey)
                 ? this.mapKey : null;
-        if (!Util.nullSafeEquals(mapKey, relationship.getMapKey())) {
+        if (!Objects.equals(mapKey, relationship.getMapKey())) {
             hasChanges = true;
             relationship.setMapKey(mapKey);
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTableModel.java
index a65981eb0..91f9d0b2e 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTableModel.java
@@ -25,7 +25,7 @@ import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.ProcedureParameter;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.modeler.toolkit.table.CMTableModel;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 
 import javax.swing.JOptionPane;
 import java.util.ArrayList;
@@ -152,7 +152,7 @@ public class ProcedureParameterTableModel extends 
CMTableModel<ProcedureParamete
     protected void setParameterName(String newVal, ProcedureParameter 
parameter) {
         String newName = newVal.trim();
         String oldName = parameter.getName();
-        if (Util.nullSafeEquals(oldName, newName)) {
+        if (Objects.equals(oldName, newName)) {
             return;
         }
         Procedure procedure = parameter.getProcedure();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
index f862a4b8a..73c33b57d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
@@ -42,7 +42,7 @@ import org.apache.cayenne.modeler.project.ProjectComparators;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
 import org.apache.cayenne.query.CapsStrategy;
 import org.apache.cayenne.query.ProcedureQuery;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -184,7 +184,7 @@ public class ProcedureQueryView extends ProjectPanel {
             return;
         }
 
-        if (Util.nullSafeEquals(newName, query.getName())) {
+        if (Objects.equals(newName, query.getName())) {
             return;
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
index 931eb992e..45c5be296 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
@@ -35,7 +35,7 @@ import org.apache.cayenne.modeler.event.model.ProcedureEvent;
 import org.apache.cayenne.modeler.toolkit.text.CMUndoableTextField;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
 import org.apache.cayenne.modeler.toolkit.checkbox.CMCheckBox;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -140,7 +140,7 @@ public class ProcedureTab extends ProjectPanel implements 
ProcedureDisplayListen
 
         Procedure procedure = session.getSelectedProcedure();
 
-        if (procedure == null || Util.nullSafeEquals(newName, 
procedure.getName())) {
+        if (procedure == null || Objects.equals(newName, procedure.getName())) 
{
             return;
         }
 
@@ -172,7 +172,7 @@ public class ProcedureTab extends ProjectPanel implements 
ProcedureDisplayListen
 
         Procedure procedure = session.getSelectedProcedure();
 
-        if (procedure != null && !Util.nullSafeEquals(procedure.getSchema(), 
text)) {
+        if (procedure != null && !Objects.equals(procedure.getSchema(), text)) 
{
             procedure.setSchema(text);
             session.fireProcedureEvent(ProcedureEvent.ofChange(this, 
procedure));
         }
@@ -185,7 +185,7 @@ public class ProcedureTab extends ProjectPanel implements 
ProcedureDisplayListen
 
         Procedure procedure = session.getSelectedProcedure();
 
-        if (procedure != null && !Util.nullSafeEquals(procedure.getCatalog(), 
text)) {
+        if (procedure != null && !Objects.equals(procedure.getCatalog(), 
text)) {
             procedure.setCatalog(text);
             session.fireProcedureEvent(ProcedureEvent.ofChange(this, 
procedure));
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/BaseQueryMainTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/BaseQueryMainTab.java
index 4a9cb4325..0b25f21ab 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/BaseQueryMainTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/BaseQueryMainTab.java
@@ -31,7 +31,7 @@ import org.apache.cayenne.modeler.toolkit.Renderers;
 import org.apache.cayenne.modeler.toolkit.text.CMUndoableTextField;
 import org.apache.cayenne.modeler.toolkit.combobox.AutoCompletion;
 import org.apache.cayenne.modeler.toolkit.combobox.CMComboBox;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -83,7 +83,7 @@ public abstract class BaseQueryMainTab extends ProjectPanel {
             return;
         }
 
-        if (Util.nullSafeEquals(newName, query.getName())) {
+        if (Objects.equals(newName, query.getName())) {
             return;
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/SelectPropertiesPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/SelectPropertiesPanel.java
index 0266b112e..5a29eb322 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/SelectPropertiesPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/SelectPropertiesPanel.java
@@ -39,6 +39,7 @@ import org.apache.cayenne.query.QueryCacheStrategy;
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.query.QueryMetadata;
 import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import org.slf4j.Logger;
@@ -211,7 +212,7 @@ public abstract class SelectPropertiesPanel extends JPanel {
         if (query != null) {
             try {
                 Object old = query.getProperty(property);
-                if (Util.nullSafeEquals(value, old)) {
+                if (Objects.equals(value, old)) {
                     return;
                 }
                 query.setProperty(property, value);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
index 9d264b34f..acf219b7c 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
@@ -30,7 +30,7 @@ import 
org.apache.cayenne.modeler.toolkit.text.CMUndoableTextField;
 import org.apache.cayenne.modeler.toolkit.ProjectPanel;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import java.awt.BorderLayout;
@@ -111,7 +111,7 @@ public class EjbqlQueryMainTab extends ProjectPanel {
             return;
         }
 
-        if (Util.nullSafeEquals(newName, query.getName())) {
+        if (Objects.equals(newName, query.getName())) {
             return;
         }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryScriptsTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryScriptsTab.java
index ee41ff9ef..c9a687f8b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryScriptsTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryScriptsTab.java
@@ -39,7 +39,7 @@ import 
org.apache.cayenne.project.validation.EJBQLStatementValidator.PositionExc
 import org.apache.cayenne.map.EJBQLQueryDescriptor;
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.modeler.toolkit.text.CMTextPane;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -177,7 +177,7 @@ public class EjbqlQueryScriptsTab extends ProjectPanel 
implements DocumentListen
 
         // Compare the value before modifying the query - text area
         // will call "verify" even if no changes have occured....
-        if (!Util.nullSafeEquals(text, query.getEjbql())) {
+        if (!Objects.equals(text, query.getEjbql())) {
             query.setEjbql(text);
             session.fireQueryEvent(QueryEvent.ofChange(this, query));
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
index b2e17669c..8dfb78c4a 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
@@ -40,7 +40,7 @@ import 
org.apache.cayenne.modeler.ui.project.editor.query.ObjectQueryPropertiesP
 import org.apache.cayenne.modeler.project.ProjectComparators;
 import org.apache.cayenne.project.extension.info.ObjectInfo;
 import org.apache.cayenne.util.CayenneMapEntry;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
@@ -196,7 +196,7 @@ public class SelectQueryMainTab extends BaseQueryMainTab {
 
         try {
             String oldQualifier = 
ExpressionConvertor.asString(query.getQualifier());
-            if (!Util.nullSafeEquals(oldQualifier, text)) {
+            if (!Objects.equals(oldQualifier, text)) {
                 Expression exp = ExpressionConvertor.fromString(text);
 
                 /*
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
index af118a37d..c22d42d43 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
@@ -30,7 +30,7 @@ import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.modeler.dbadapter.DbAdapters;
 import org.apache.cayenne.modeler.toolkit.text.CMUndoableTextPane;
 import org.apache.cayenne.modeler.toolkit.text.CMTextPane;
-import org.apache.cayenne.util.Util;
+import java.util.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -234,12 +234,12 @@ public class SQLTemplateScriptsTab extends ProjectPanel {
         // Compare the value before modifying the query - text pane
         // will call "verify" even if no changes have occured....
         if (key.equals(DEFAULT_LABEL)) {
-            if (!Util.nullSafeEquals(text, query.getSql())) {
+            if (!Objects.equals(text, query.getSql())) {
                 query.setSql(text);
                 session.fireQueryEvent(QueryEvent.ofChange(this, query));
             }
         } else {
-            if (!Util.nullSafeEquals(text, query.getAdapterSql().get(key))) {
+            if (!Objects.equals(text, query.getAdapterSql().get(key))) {
                 query.getAdapterSql().put(key, text);
                 session.fireQueryEvent(QueryEvent.ofChange(this, query));
             }

Reply via email to