fix equals on incomparable types

Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
diff --git a/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/MetadataMirrorFactory.java b/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/MetadataMirrorFactory.java
index f291fa9..c9b25d9 100644
--- a/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/MetadataMirrorFactory.java
+++ b/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/MetadataMirrorFactory.java
@@ -334,7 +334,7 @@ public void setEnvironments(ProcessingEnvironment processingEnvironment, RoundEn
                 List<? extends AnnotationMirror> annotationMirrors = element.getAnnotationMirrors();
                 for (AnnotationMirror am : annotationMirrors) {
                     Name qn = ((TypeElement) am.getAnnotationType().asElement()).getQualifiedName();
-                    if ("jakarta.annotation.Generated".equals(qn) || "jakarta.annotation.processing.Generated".equals(qn)) {
+                    if ("jakarta.annotation.Generated".equals(qn.toString()) || "jakarta.annotation.processing.Generated".equals(qn.toString())) {
                         isGenerated = true;
                         break;
                     }
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/ClassAccessor.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/ClassAccessor.java
index e1880f5..8d52c6d 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/ClassAccessor.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/ClassAccessor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -307,7 +307,7 @@ protected void addAccessor(MappingAccessor accessor) {
 
                 // If the map key class is not specified, we need to look it
                 // up from the accessor type.
-                if (mapKeyClass == null || mapKeyClass.equals(void.class)) {
+                if (mapKeyClass == null || mapKeyClass.isClass(void.class)) {
                     // Try to extract the map key class from a generic
                     // specification. This will throw an exception if it can't.
                     mapKeyClass = accessor.getMapKeyReferenceClass();
@@ -1043,7 +1043,7 @@ public boolean hasDerivedId() {
      * INTERNAL:
      */
     protected boolean hasParentClass() {
-        return m_parentClass != null && ! m_parentClass.equals(void.class);
+        return m_parentClass != null && ! m_parentClass.isClass(void.class);
     }
 
     /**
@@ -1571,7 +1571,7 @@ protected void processCopyPolicy(){
     protected void processCustomizer() {
         MetadataAnnotation customizer = getAnnotation(Customizer.class);
 
-        if ((m_customizerClass != null && ! m_customizerClass.equals(void.class)) || customizer != null) {
+        if ((m_customizerClass != null && ! m_customizerClass.isClass(void.class)) || customizer != null) {
             if (getDescriptor().hasCustomizer()) {
                 // We must be processing a mapped superclass and its subclass
                 // override the customizer class, that is, defined its own. Log
@@ -1579,7 +1579,7 @@ protected void processCustomizer() {
                 // mapped superclass for the descriptor's java class.
                 getLogger().logConfigMessage(MetadataLogger.IGNORE_MAPPED_SUPERCLASS_CUSTOMIZER, getDescriptor().getJavaClass(), getJavaClass());
             } else {
-                if (m_customizerClass == null || m_customizerClass.equals(void.class)) {
+                if (m_customizerClass == null || m_customizerClass.isClass(void.class)) {
                     // Use the annotation value.
                     m_customizerClass = getMetadataClass(customizer.getAttributeString("value"));
                 } else {
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/MappedSuperclassAccessor.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/MappedSuperclassAccessor.java
index 4c61d85..5a7cec7 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/MappedSuperclassAccessor.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/classes/MappedSuperclassAccessor.java
@@ -603,7 +603,7 @@ protected boolean hasObjectRelationalMethodMappingAnnotationsDefined() {
      * reference an id class type.
      */
     protected void initIdClass() {
-        if (m_idClass == null || m_idClass.equals(void.class)) {
+        if (m_idClass == null || m_idClass.isClass(void.class)) {
             // Check for an IdClass annotation.
             if (isAnnotationPresent(JPA_ID_CLASS)) {
                 m_idClass = getMetadataClass(getAnnotation(JPA_ID_CLASS).getAttributeString("value"));
@@ -616,7 +616,7 @@ protected void initIdClass() {
         }
 
         // Add the id class to the known list of id classes for this project.
-        if (m_idClass != null && ! m_idClass.equals(void.class)) {
+        if (m_idClass != null && ! m_idClass.isClass(void.class)) {
             getProject().addIdClass(m_idClass.getName());
             // 266912: We store the IdClass (not an EmbeddableId) for use by the Metamodel API
             getProject().getProject().addMetamodelIdClassMapEntry(getAccessibleObject().getName(), m_idClass.getName().replace('$', '.'));
@@ -1190,7 +1190,7 @@ protected void processFetchGroups() {
      * type of the entity for which it is the primary key.
      */
     protected void processIdClass() {
-        if (m_idClass != null && !m_idClass.equals(void.class)) {
+        if (m_idClass != null && !m_idClass.isClass(void.class)) {
             getDescriptor().setPKClass(m_idClass);
 
             if (getDescriptor().usesDefaultPropertyAccess()) {
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/ElementCollectionAccessor.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/ElementCollectionAccessor.java
index 80ee6d0..3a5c703 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/ElementCollectionAccessor.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/ElementCollectionAccessor.java
@@ -796,7 +796,7 @@ public boolean hasMapKey() {
      */
     @Override
     protected boolean hasMapKeyClass() {
-        return m_mapKeyClass != null && ! m_mapKeyClass.equals(void.class);
+        return m_mapKeyClass != null && ! m_mapKeyClass.isClass(void.class);
     }
 
     /**
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/MappingAccessor.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/MappingAccessor.java
index 9e1de4d..2891a7b 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/MappingAccessor.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/MappingAccessor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 1998, 2018 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -1357,9 +1357,9 @@ public boolean isOneToOne() {
      */
     protected boolean isPrimitiveWrapperClass(MetadataClass cls) {
         return cls.extendsClass(Number.class) ||
-            cls.equals(Boolean.class) ||
-            cls.equals(Character.class) ||
-            cls.equals(String.class) ||
+            cls.isClass(Boolean.class) ||
+            cls.isClass(Character.class) ||
+            cls.isClass(String.class) ||
             cls.extendsClass(java.math.BigInteger.class) ||
             cls.extendsClass(java.math.BigDecimal.class) ||
             cls.extendsClass(java.util.Date.class) ||
@@ -2119,17 +2119,17 @@ protected void setIndirectionPolicy(ContainerMapping mapping, String mapKey, boo
         if (usesIndirection && (mapping instanceof ForeignReferenceMapping)) {
             containerPolicySet = true;
             CollectionMapping collectionMapping = (CollectionMapping)mapping;
-            if (rawClass.equals(Map.class)) {
+            if (rawClass.isClass(Map.class)) {
                 if (collectionMapping.isDirectMapMapping()) {
                     ((DirectMapMapping) mapping).useTransparentMap();
                 } else {
                     collectionMapping.useTransparentMap(mapKey);
                 }
-            } else if (rawClass.equals(List.class)) {
+            } else if (rawClass.isClass(List.class)) {
                 collectionMapping.useTransparentList();
-            } else if (rawClass.equals(Collection.class)) {
+            } else if (rawClass.isClass(Collection.class)) {
                 collectionMapping.useTransparentCollection();
-            } else if (rawClass.equals(Set.class)) {
+            } else if (rawClass.isClass(Set.class)) {
                 collectionMapping.useTransparentSet();
             } else {
                 getLogger().logWarningMessage(MetadataLogger.WARNING_INVALID_COLLECTION_USED_ON_LAZY_RELATION, getJavaClass(), getAnnotatedElement(), rawClass);
@@ -2142,20 +2142,20 @@ protected void setIndirectionPolicy(ContainerMapping mapping, String mapKey, boo
             }
         }
         if (!containerPolicySet) {
-            if (rawClass.equals(Map.class)) {
+            if (rawClass.isClass(Map.class)) {
                 if (mapping instanceof DirectMapMapping) {
                     ((DirectMapMapping) mapping).useMapClass(java.util.Hashtable.class);
                 } else {
                     mapping.useMapClass(java.util.Hashtable.class, mapKey);
                 }
-            } else if (rawClass.equals(Set.class)) {
+            } else if (rawClass.isClass(Set.class)) {
                 // This will cause it to use a CollectionContainerPolicy type
                 mapping.useCollectionClass(java.util.HashSet.class);
-            } else if (rawClass.equals(List.class)) {
+            } else if (rawClass.isClass(List.class)) {
                 // This will cause a ListContainerPolicy type to be used or
                 // OrderedListContainerPolicy if ordering is specified.
                 mapping.useCollectionClass(java.util.Vector.class);
-            } else if (rawClass.equals(Collection.class)) {
+            } else if (rawClass.isClass(Collection.class)) {
                 // Force CollectionContainerPolicy type to be used with a
                 // collection implementation.
                 mapping.setContainerPolicy(new CollectionContainerPolicy(java.util.Vector.class));
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/VersionAccessor.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/VersionAccessor.java
index 2e0a746..f149105 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/VersionAccessor.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/VersionAccessor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -85,7 +85,7 @@ public int hashCode() {
      * Returns true if the given class is a valid timestamp locking type.
      */
     protected boolean isValidTimestampVersionLockingType(MetadataClass cls) {
-        return cls.equals(java.sql.Timestamp.class);
+        return cls.isClass(java.sql.Timestamp.class);
     }
 
     /**
@@ -93,12 +93,12 @@ protected boolean isValidTimestampVersionLockingType(MetadataClass cls) {
      * Returns true if the given class is a valid version locking type.
      */
     protected boolean isValidVersionLockingType(MetadataClass cls) {
-        return (cls.equals(int.class) ||
-                cls.equals(Integer.class) ||
-                cls.equals(short.class) ||
-                cls.equals(Short.class) ||
-                cls.equals(long.class) ||
-                cls.equals(Long.class));
+        return (cls.isClass(int.class) ||
+                cls.isClass(Integer.class) ||
+                cls.isClass(short.class) ||
+                cls.isClass(Short.class) ||
+                cls.isClass(long.class) ||
+                cls.isClass(Long.class));
     }
 
     /**
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataClass.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataClass.java
index ac945e5..6b222d1 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataClass.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataClass.java
@@ -152,18 +152,11 @@ public void addMethod(MetadataMethod method) {
     /**
      * Allow comparison to Java classes and Metadata classes.
      */
-    @Override
-    public boolean equals(Object object) {
-        if (object instanceof Class) {
-            if (getName() == null) {
-                // Void's name is null.
-                return ((Class)object).getName() == null;
-            }
-
-            return getName().equals(((Class)object).getName());
+    public boolean isClass(Class<?> clazz) {
+        if (getName() == null) {
+            return false;
         }
-
-        return super.equals(object);
+        return getName().equals(clazz.getName());
     }
 
     /**
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/LobMetadata.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/LobMetadata.java
index c7bbcff..f0a0924 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/LobMetadata.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/LobMetadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -86,9 +86,9 @@ public int hashCode() {
      * Returns true if the given class is a valid blob type.
      */
     public static boolean isValidBlobType(MetadataClass cls) {
-        return cls.equals(byte[].class) ||
-               cls.equals(Byte[].class) ||
-               cls.equals(java.sql.Blob.class);
+        return cls.isClass(byte[].class) ||
+               cls.isClass(Byte[].class) ||
+               cls.isClass(java.sql.Blob.class);
     }
 
     /**
@@ -96,10 +96,10 @@ public static boolean isValidBlobType(MetadataClass cls) {
      * Returns true if the given class is a valid clob type.
      */
     public static boolean isValidClobType(MetadataClass cls) {
-        return cls.equals(char[].class) ||
-               cls.equals(String.class) ||
-               cls.equals(Character[].class) ||
-               cls.equals(java.sql.Clob.class);
+        return cls.isClass(char[].class) ||
+               cls.isClass(String.class) ||
+               cls.isClass(Character[].class) ||
+               cls.isClass(java.sql.Clob.class);
     }
 
     /**
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/TemporalMetadata.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/TemporalMetadata.java
index fbda1bb..fc2ccb6 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/TemporalMetadata.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/converters/TemporalMetadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -102,9 +102,9 @@ public String getTemporalType() {
      * marked temporal.
      */
     public static boolean isValidTemporalType(MetadataClass cls) {
-        return (cls.equals(java.util.Date.class) ||
-                cls.equals(java.util.Calendar.class) ||
-                cls.equals(java.util.GregorianCalendar.class));
+        return (cls.isClass(java.util.Date.class) ||
+                cls.isClass(java.util.Calendar.class) ||
+                cls.isClass(java.util.GregorianCalendar.class));
     }
 
     /**