diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/xr/ProjectHelper.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/xr/ProjectHelper.java
index 1db37d2..59ea969 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/xr/ProjectHelper.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/xr/ProjectHelper.java
@@ -56,8 +56,7 @@
             if (!XRDynamicEntity.class.isAssignableFrom(desc.getJavaClass())) {
                 continue;
             }
-            @SuppressWarnings({"unchecked"})
-            Class<? extends XRDynamicEntity> clz = (Class<? extends XRDynamicEntity>) desc.getJavaClass();
+            Class<?> clz = desc.getJavaClass();
             ClassDescriptor xdesc = null;
             if (oxProject != null) {
                 xdesc = oxProject.getDescriptorForAlias(desc.getAlias());
@@ -65,7 +64,7 @@
             XRDynamicPropertiesManager xrDPM = null;
             if (!clz.getName().endsWith(COLLECTION_WRAPPER_SUFFIX)) {
                 try {
-                    XRDynamicEntity newInstance = clz.getConstructor().newInstance();
+                    XRDynamicEntity newInstance = (XRDynamicEntity) clz.getConstructor().newInstance();
                     xrDPM = newInstance.fetchPropertiesManager();
                 }
                 catch (Exception e) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java
index 17c0004..d366280 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java
@@ -2517,8 +2517,9 @@
      * Return the java class.
      */
     @Override
-    public Class getJavaClass() {
-        return javaClass;
+    @SuppressWarnings({"unchecked"})
+    public <T> Class<T> getJavaClass() {
+        return (Class<T>) javaClass;
     }
 
     /**
@@ -2537,7 +2538,7 @@
      */
     public List<DatabaseMapping> getLockableMappings() {
         if (this.lockableMappings == null) {
-            this.lockableMappings = new ArrayList();
+            this.lockableMappings = new ArrayList<>();
         }
         return this.lockableMappings;
     }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/EclipseLinkSemanticValidatorHelper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/EclipseLinkSemanticValidatorHelper.java
index eebb691..0feca2c 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/EclipseLinkSemanticValidatorHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/EclipseLinkSemanticValidatorHelper.java
@@ -154,7 +154,7 @@
 
     @Override
     @SuppressWarnings({ "rawtypes", "unchecked" })
-    public List getDeclarations() {
+    public List<? extends JPQLQueryDeclaration> getDeclarations() {
         return queryContext.getDeclarations();
     }
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ExpressionBuilderVisitor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ExpressionBuilderVisitor.java
index 82adb6c..c95576a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ExpressionBuilderVisitor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ExpressionBuilderVisitor.java
@@ -1449,6 +1449,7 @@
             text = text.substring(0, text.length() - 1);
         }
 
+        @SuppressWarnings({"unchecked"})
         Number number = queryContext.newInstance((Class<? extends Number>) type[0], String.class, text);
 
         // Now create the numeric expression
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLQueryContext.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLQueryContext.java
index 8d5ff3f..40278fe 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLQueryContext.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLQueryContext.java
@@ -1000,7 +1000,7 @@
      * @return A new instance or <code>null</code> if a problem was encountered during instantiation
      */
     <T> T newInstance(Class<T> type, Class<?> parameterType, Object parameter) {
-        return newInstance(type, new Class[] { parameterType }, new Object[] { parameter });
+        return newInstance(type, new Class<?>[] { parameterType }, new Object[] { parameter });
     }
 
     /**
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java
index 721a8e5..c8846ec 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java
@@ -106,7 +106,7 @@
     /**
      * Return the java class.
      */
-    Class<?> getJavaClass();
+    <T> Class<T> getJavaClass();
 
     /**
      * Return the class name, used by the MW.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/pom.xml b/jpa/org.eclipse.persistence.jpa.jpql/pom.xml
index e5e6829..c11c33b 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/pom.xml
+++ b/jpa/org.eclipse.persistence.jpa.jpql/pom.xml
@@ -32,6 +32,7 @@
 
     <properties>
         <comp.xlint>-Xlint:all</comp.xlint>
+        <comp.test.xlint>-Xlint:all</comp.test.xlint>
     </properties>
 
     <dependencies>
@@ -50,6 +51,15 @@
 
     <build>
         <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <compilerArgs>
+                        <arg>-Werror</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
             <!--Run specified tests/test suite-->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractSemanticValidator.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractSemanticValidator.java
index b120266..3e7b099 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractSemanticValidator.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractSemanticValidator.java
@@ -364,7 +364,7 @@
     protected boolean isIdentificationVariableDeclaredAfter(String variableName,
                                                             int variableNameIndex,
                                                             int joinIndex,
-                                                            List<JPQLQueryDeclaration> declarations) {
+                                                            List<? extends JPQLQueryDeclaration> declarations) {
 
         for (int index = variableNameIndex, declarationCount = declarations.size(); index < declarationCount; index++) {
 
@@ -525,7 +525,7 @@
         // The identification variable declarations are evaluated from left to right in
         // the FROM clause, and an identification variable declaration can use the result
         // of a preceding identification variable declaration of the query string
-        List<JPQLQueryDeclaration> declarations = helper.getDeclarations();
+        List<? extends JPQLQueryDeclaration> declarations = helper.getDeclarations();
 
         for (int index = 0, count = declarations.size(); index < count; index++) {
 
@@ -1682,7 +1682,7 @@
     }
 
     protected void validateJoinsIdentificationVariable(AbstractFromClause expression,
-                                                       List<JPQLQueryDeclaration> declarations,
+                                                       List<? extends JPQLQueryDeclaration> declarations,
                                                        JPQLQueryDeclaration declaration,
                                                        int index) {
 
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/SemanticValidatorHelper.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/SemanticValidatorHelper.java
index e428afa..d7209cd 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/SemanticValidatorHelper.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/SemanticValidatorHelper.java
@@ -98,7 +98,7 @@
      *
      * @return The list of {@link JPQLQueryDeclaration} of the current query that was parsed
      */
-    List<JPQLQueryDeclaration> getDeclarations();
+    List<? extends JPQLQueryDeclaration> getDeclarations();
 
     /**
      * Retrieves the embeddable with the given type.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalExpressionStateObjectBuilder.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalExpressionStateObjectBuilder.java
index 5193a3b..cd49110 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalExpressionStateObjectBuilder.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalExpressionStateObjectBuilder.java
@@ -275,9 +275,16 @@
     }
 
     @Override
-    public T in(T... inItems) {
-        checkBuilders(inItems);
-        in(false, inItems);
+    public T in(T builder) {
+        checkBuilders(builder);
+        in(false, builder);
+        return (T) this;
+    }
+
+    @Override
+    public T in(T builder1, T builder2) {
+        checkBuilders(builder1, builder2);
+        in(false, builder1, builder2);
         return (T) this;
     }
 
@@ -476,9 +483,16 @@
     }
 
     @Override
-    public T notIn(T... inItems) {
-        checkBuilders(inItems);
-        in(true, inItems);
+    public T notIn(T builder) {
+        checkBuilders(builder);
+        in(true, builder);
+        return (T) this;
+    }
+
+    @Override
+    public T notIn(T builder1, T builder2) {
+        checkBuilders(builder1, builder2);
+        in(true, builder1, builder2);
         return (T) this;
     }
 
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalStateObjectBuilderWrapper.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalStateObjectBuilderWrapper.java
index 964730b..ca5a630 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalStateObjectBuilderWrapper.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractConditionalStateObjectBuilderWrapper.java
@@ -209,8 +209,13 @@
     }
 
     @Override
-    public IConditionalExpressionStateObjectBuilder in(IConditionalExpressionStateObjectBuilder... inItems) {
-        return delegate.in(inItems);
+    public IConditionalExpressionStateObjectBuilder in(IConditionalExpressionStateObjectBuilder builder1, IConditionalExpressionStateObjectBuilder builder2) {
+        return delegate.in(builder1, builder2);
+    }
+
+    @Override
+    public IConditionalExpressionStateObjectBuilder in(IConditionalExpressionStateObjectBuilder builder) {
+        return delegate.in(builder);
     }
 
     @Override
@@ -379,8 +384,13 @@
     }
 
     @Override
-    public IConditionalExpressionStateObjectBuilder notIn(IConditionalExpressionStateObjectBuilder... inItems) {
-        return delegate.notIn(inItems);
+    public IConditionalExpressionStateObjectBuilder notIn(IConditionalExpressionStateObjectBuilder builder1, IConditionalExpressionStateObjectBuilder builder2) {
+        return delegate.notIn(builder1, builder2);
+    }
+
+    @Override
+    public IConditionalExpressionStateObjectBuilder notIn(IConditionalExpressionStateObjectBuilder builder) {
+        return delegate.notIn(builder);
     }
 
     @Override
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractScalarExpressionStateObjectBuilder.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractScalarExpressionStateObjectBuilder.java
index 88ac4fa..4692990 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractScalarExpressionStateObjectBuilder.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/AbstractScalarExpressionStateObjectBuilder.java
@@ -15,6 +15,7 @@
 //
 package org.eclipse.persistence.jpa.jpql.tools.model;
 
+import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -175,7 +176,12 @@
     }
 
     @Override
-    public T coalesce(T builder1, T builder2, T... builders) {
+    public T coalesce(T builder1, T builder2) {
+        return coalesce(builder1, builder2, (T[]) Array.newInstance(builder1.getClass(), 0));
+    }
+
+    @Override
+    public T coalesce(T builder1, T builder2, T[] builders) {
 
         checkBuilders(builder1, builder2);
         checkBuilders(builders);
@@ -191,7 +197,12 @@
     }
 
     @Override
-    public T concat(T builder1, T builder2, T... builders) {
+    public T concat(T builder1, T builder2) {
+        return concat(builder1, builder2, (T[]) Array.newInstance(builder1.getClass(), 0));
+    }
+
+    @Override
+    public T concat(T builder1, T builder2, T[] builders) {
 
         checkBuilders(builder1, builder2);
         checkBuilders(builders);
@@ -292,15 +303,28 @@
     }
 
     @Override
-    public T function(String identifier, String functionName, T... arguments) {
+    public T function(String identifier, String functionName) {
+        StateObject stateObject = new FunctionExpressionStateObject(
+                getParent(),
+                identifier,
+                functionName,
+                stateObjects(0)
+        );
+
+        add(stateObject);
+        return (T) this;
+    }
+
+    @Override
+    public T function(String identifier, String functionName, T[] arguments) {
 
         checkBuilders(arguments);
 
         StateObject stateObject = new FunctionExpressionStateObject(
-            getParent(),
-            identifier,
-            functionName,
-            stateObjects(arguments)
+                getParent(),
+                identifier,
+                functionName,
+                stateObjects(arguments)
         );
 
         add(stateObject);
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IAbstractConditionalExpressionStateObjectBuilder.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IAbstractConditionalExpressionStateObjectBuilder.java
index 7724db3..82310e0 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IAbstractConditionalExpressionStateObjectBuilder.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IAbstractConditionalExpressionStateObjectBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -83,7 +83,8 @@
     T greaterThanOrEqual(T builder);
     T in(SimpleSelectStatementStateObject subquery);
     T in(String... inItems);
-    T in(T... inItems);
+    T in(T builder);
+    T in(T builder1, T builder2);
     T isEmpty(String path);
     T isNotEmpty(String path);
     T isNotNull(String path);
@@ -104,7 +105,8 @@
     T notExists(SimpleSelectStatementStateObject subquery);
     T notIn(SimpleSelectStatementStateObject subquery);
     T notIn(String... inItems);
-    T notIn(T... inItems);
+    T notIn(T builder);
+    T notIn(T builder1, T builder2);
     T notLike(String patternValue);
     T notLike(T builder);
     T notLike(T builder, String escapeCharacter);
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IScalarExpressionStateObjectBuilder.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IScalarExpressionStateObjectBuilder.java
index 6fabf2b..df2af77 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IScalarExpressionStateObjectBuilder.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IScalarExpressionStateObjectBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -29,7 +29,7 @@
      * Creates the expression <code><b>ABS(x)</b></code>.
      *
      * @param builder The parameter of the <code><b>ABS</b></code> expression
-     * @return This This builder
+     * @return This builder
      */
     T abs(T builder);
 
@@ -45,7 +45,7 @@
      * Creates the expression <code><b>AVG(path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T avg(String path);
 
@@ -53,7 +53,7 @@
      * Creates the expression <code><b>AVG(DISTINCT path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T avgDistinct(String path);
 
@@ -62,7 +62,7 @@
      *
      * @param builder The {@link ICaseExpressionStateObjectBuilder builder} of a <code><b>CASE</b></code>
      * expression
-     * @return This This builder
+     * @return This builder
      */
     T case_(ICaseExpressionStateObjectBuilder builder);
 
@@ -71,12 +71,32 @@
      *
      * @param builder1 The first scalar expression
      * @param builder2 The second scalar expression
+     * @return This builder
+     */
+    T coalesce(T builder1,
+               T builder2);
+
+    /**
+     * Create the expression <code><b>COALESCE(scalar_expression {, scalar_expression}+)</b></code>.
+     *
+     * @param builder1 The first scalar expression
+     * @param builder2 The second scalar expression
      * @param builders The subsequent scalar expressions
-     * @return This This builder
+     * @return This builder
      */
     T coalesce(T builder1,
                T builder2,
-               T... builders);
+               T[] builders);
+
+    /**
+     * Creates the expression <code><b>CONCAT(string_primary, string_primary {, string_primary}*)</b></code>.
+     *
+     * @param builder1 The first argument of the expression
+     * @param builder2 The second argument of the expression
+     * @return This builder
+     */
+    T concat(T builder1,
+             T builder2);
 
     /**
      * Creates the expression <code><b>CONCAT(string_primary, string_primary {, string_primary}*)</b></code>.
@@ -84,11 +104,11 @@
      * @param builder1 The first argument of the expression
      * @param builder2 The second argument of the expression
      * @param builders The subsequence arguments of the expression, which are optional
-     * @return This This builder
+     * @return This builder
      */
     T concat(T builder1,
              T builder2,
-             T... builders);
+             T[] builders);
 
     /**
      * Creates the expression <code><b>COUNT(identification_variable |
@@ -96,7 +116,7 @@
      *                                       single_valued_object_path_expression)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T count(String path);
 
@@ -106,35 +126,35 @@
      *                                                single_valued_object_path_expression)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T countDistinct(String path);
 
     /**
      * Creates the expression representing <code><b>CURRENT_DATE</b></code>.
      *
-     * @return This This builder
+     * @return This builder
      */
     T currentDate();
 
     /**
      * Creates the expression representing <code><b>CURRENT_TIME</b></code>.
      *
-     * @return This This builder
+     * @return This builder
      */
     T currentTime();
 
     /**
      * Creates the expression representing <code><b>CURRENT_TIMESTAMP</b></code>.
      *
-     * @return This This builder
+     * @return This builder
      */
     T currentTimestamp();
 
     /**
      * Creates a new date using the JDBC syntax of a date.
      *
-     * @return This This builder
+     * @return This builder
      */
     T date(String jdbcDate);
 
@@ -142,7 +162,7 @@
      * Creates the expression <code><b>x / y</b></code>.
      *
      * @param builder The right side of the division expression
-     * @return This This builder
+     * @return This builder
      */
     T divide(T builder);
 
@@ -150,7 +170,7 @@
      * Creates a new entity type literal.
      *
      * @param entityTypeName The short name of the entity
-     * @return This This builder
+     * @return This builder
      */
     T entityType(String entityTypeName);
 
@@ -158,7 +178,7 @@
      * Creates a new enum literal.
      *
      * @param enumConstant The enum constant
-     * @return This This builder
+     * @return This builder
      */
     T enumLiteral(Enum<? extends Enum<?>> enumConstant);
 
@@ -177,10 +197,19 @@
      *
      * @param identifier The JPQL identifier that is used to identify the SQL expression
      * @param functionName The name of the native SQL function
+     * @return This builder
+     */
+    T function(String identifier, String functionName);
+
+    /**
+     * Creates the expression <code><b>&lt;identifier&gt;('functionName' {, expression}*)</b></code>.
+     *
+     * @param identifier The JPQL identifier that is used to identify the SQL expression
+     * @param functionName The name of the native SQL function
      * @param arguments The arguments of the expression
      * @return This builder
      */
-    T function(String identifier, String functionName, T... arguments);
+    T function(String identifier, String functionName, T[] arguments);
 
     /**
      * Returns the builder that can create a <code><b>CASE</b></code> expression, which requires a
@@ -194,7 +223,7 @@
      * Creates the expression <code><b>INDEX(identification_variable)</b></code>.
      *
      * @param variable The identification variable
-     * @return This This builder
+     * @return This builder
      */
     T index(String variable);
 
@@ -202,7 +231,7 @@
      * Creates the expression <code><b>LENGTH(expression)</b></code>.
      *
      * @param builder The encapsulated expression
-     * @return This This builder
+     * @return This builder
      */
     T length(T builder);
 
@@ -211,7 +240,7 @@
      *
      * @param parameter1 The first string primary
      * @param parameter2 The second string primary
-     * @return This This builder
+     * @return This builder
      */
     T locate(T parameter1, T parameter2);
 
@@ -221,7 +250,7 @@
      * @param parameter1 The first string primary
      * @param parameter2 The second string primary
      * @param parameter3 The position of the search within the string
-     * @return This This builder
+     * @return This builder
      */
     T locate(T parameter1, T parameter2, T parameter3);
 
@@ -229,7 +258,7 @@
      * Creates the expression <code><b>MAX(path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T max(String path);
 
@@ -237,7 +266,7 @@
      * Creates the expression <code><b>MAX(DISTINCT path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T maxDistinct(String path);
 
@@ -245,7 +274,7 @@
      * Creates the expression <code><b>AVG(path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T min(String path);
 
@@ -253,7 +282,7 @@
      * Creates the expression <code><b>AVG(DISTINCT path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T minDistinct(String path);
 
@@ -261,7 +290,7 @@
      * Creates the expression <code><b>- x</b></code>.
      *
      * @param builder The expression that will have the plus sign prepended
-     * @return This This builder
+     * @return This builder
      */
     T minus(T builder);
 
@@ -270,7 +299,7 @@
      *
      * @param parameter1 The first parameter
      * @param parameter2 The second parameter
-     * @return This This builder
+     * @return This builder
      */
     T mod(T parameter1, T parameter2);
 
@@ -278,7 +307,7 @@
      * Creates the expression <code><b>x * y</b></code>.
      *
      * @param builder The right side of the multiply expression
-     * @return This This builder
+     * @return This builder
      */
     T multiply(T builder);
 
@@ -287,7 +316,7 @@
      *
      * @param builder1 The first scalar expression
      * @param builder2 The second scalar expression
-     * @return This This builder
+     * @return This builder
      */
     T nullIf(T builder1, T builder2);
 
@@ -295,7 +324,7 @@
      * Creates the numeric literal.
      *
      * @param number The numeric literal
-     * @return This This builder
+     * @return This builder
      */
     T numeric(Number number);
 
@@ -303,7 +332,7 @@
      * Creates the numeric literal.
      *
      * @param number The numeric literal
-     * @return This This builder
+     * @return This builder
      */
     T numeric(String number);
 
@@ -311,7 +340,7 @@
      * Creates the input parameter.
      *
      * @param parameter The named or positional input parameter
-     * @return This This builder
+     * @return This builder
      */
     T parameter(String parameter);
 
@@ -319,7 +348,7 @@
      * Creates a new state field path expression.
      *
      * @param path The state field path path expression
-     * @return This This builder
+     * @return This builder
      */
     T path(String path);
 
@@ -327,7 +356,7 @@
      * Creates the expression <code><b>+ x</b></code>.
      *
      * @param builder The expression that will have the plus sign prepended
-     * @return This This builder
+     * @return This builder
      */
     T plus(T builder);
 
@@ -335,7 +364,7 @@
      * Creates the expression <code><b>SIZE(collection_valued_path_expression)</b></code>.
      *
      * @param path The collection-valued path expression
-     * @return This This builder
+     * @return This builder
      */
     T size(String path);
 
@@ -343,7 +372,7 @@
      * Creates the expression <code><b>SQRT(x)</b></code>.
      *
      * @param builder The parameter of the <code><b>ABS</b></code> expression
-     * @return This This builder
+     * @return This builder
      */
     T sqrt(T builder);
 
@@ -351,7 +380,7 @@
      * Creates a new string literal.
      *
      * @param literal The string literal
-     * @return This This builder
+     * @return This builder
      */
     T string(String literal);
 
@@ -359,7 +388,7 @@
      * Creates an encapsulated expression: <code><b>(expression)</b></code>.
      *
      * @param builder The expression that will be encapsulated
-     * @return This This builder
+     * @return This builder
      */
     T sub(T builder);
 
@@ -367,7 +396,7 @@
      * Creates the expression <code><b>x - y</b></code>.
      *
      * @param builder The right side of the addition expression
-     * @return This This builder
+     * @return This builder
      */
     T subtract(T builder);
 
@@ -375,7 +404,7 @@
      * Creates the expression <code><b>SUM(path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T sum(String path);
 
@@ -383,7 +412,7 @@
      * Creates the expression <code><b>SUM(path)</b></code>.
      *
      * @param path The state field path expression
-     * @return This This builder
+     * @return This builder
      */
     T sumDistinct(String path);
 
@@ -391,7 +420,7 @@
      * Creates the expression <code><b>TYPE(identification_variable | single_valued_object_path_expression | input_parameter)</b></code>.
      *
      * @param path The identification variable or the input parameter
-     * @return This This builder
+     * @return This builder
      */
     T type(String path);
 }
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/AbstractProduct.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/AbstractProduct.java
index e5b9f9f..58d9750 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/AbstractProduct.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/AbstractProduct.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -19,6 +19,8 @@
 @MappedSuperclass
 public abstract class AbstractProduct implements Serializable {
 
+    private static final long serialVersionUID = 8515521957420450947L;
+
     @Basic
     private String partNumber;
 }
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Address.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Address.java
index 20e1519..c6d0aa4 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Address.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Address.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -50,6 +50,8 @@
 @SuppressWarnings("unused")
 public class Address implements Serializable {
 
+    private static final long serialVersionUID = 1959639267574140129L;
+
     private String city;
     @Id
     @Column(nullable = false)
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Customer.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Customer.java
index 53eafc8..f6bfccf 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Customer.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Customer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -37,6 +37,9 @@
    @NamedQuery(name="customer.new",       query="SELECT new com.titan.domain.Name(c.firstName, c.lastName) FROM Customer c")
 })
 public class Customer implements Serializable {
+
+    private static final long serialVersionUID = 6523341191151363983L;
+
     @Column(name="FIRST_NAME")
     private String firstName;
     @Column(name="HAS_GOOD_CREDIT")
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Dept.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Dept.java
index 71c907e..f3319ed 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Dept.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Dept.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -32,6 +32,9 @@
 })
 @SuppressWarnings("unused")
 public class Dept implements Serializable {
+
+    private static final long serialVersionUID = 4238076584091468481L;
+
     @Id
     @Column(nullable = false)
     private Long deptno;
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Employee.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Employee.java
index ab8323f..07a2a6d 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Employee.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Employee.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -103,6 +103,8 @@
 @SuppressWarnings("unused")
 public class Employee implements Serializable {
 
+    private static final long serialVersionUID = 202974405054090345L;
+
     @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)
     @JoinColumn(name = "ADDR_ID")
     private Address address;
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Home.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Home.java
index c8e74b7..839c1a8 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Home.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Home.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -18,9 +18,11 @@
 import jakarta.persistence.Id;
 
 @Entity
-@SuppressWarnings("unused")
+@SuppressWarnings({"unused"})
 public class Home implements Serializable {
 
+    private static final long serialVersionUID = 3615334616788538375L;
+
     private List<Phone> phones;
     @Id
     private String city;
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Phone.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Phone.java
index 60993b0..fb993b2 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Phone.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Phone.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -29,6 +29,8 @@
 @SuppressWarnings("unused")
 public class Phone implements Serializable {
 
+    private static final long serialVersionUID = -1706572488815142542L;
+
     private String area;
     @ManyToOne
     @JoinColumn(name = "CUSTOMER_ID")
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Product.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Product.java
index 0bda1ce..ddd0728 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Product.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/jpql/query/Product.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -37,6 +37,8 @@
 @SuppressWarnings("unused")
 public class Product extends AbstractProduct {
 
+    private static final long serialVersionUID = -4279004200805515912L;
+
     @Id
     private int id;
     @OneToOne
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/ContentAssistTest.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/ContentAssistTest.java
index 279ebfd..8d9377d 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/ContentAssistTest.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/ContentAssistTest.java
@@ -173,7 +173,9 @@
         List<String> proposalsNotRemoved = new ArrayList<>();
         CollectionTools.addAll(proposalsNotRemoved, expectedProposals);
 
-        return (List<String>[]) new List[] { proposalsNotRemoved, unexpectedProposals };
+        @SuppressWarnings({"rawtypes"})
+        List<String>[] list = (List<String>[]) new List[] { proposalsNotRemoved, unexpectedProposals };
+        return list;
     }
 
     protected List<String> classNames() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/JAXBContext.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/JAXBContext.java
index 89eaca7..2e88dc0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/JAXBContext.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/JAXBContext.java
@@ -1517,7 +1517,7 @@
             //Add schema types generated for mapped domain classes
             for (Object o : xmlContext.getSession().getProject().getOrderedDescriptors()) {
                 Descriptor next = (Descriptor) o;
-                Class javaClass = next.getJavaClass();
+                Class<?> javaClass = next.getJavaClass();
 
                 if (next.getSchemaReference() != null) {
                     QName schemaType = next.getSchemaReference().getSchemaContextAsQName(next.getNamespaceResolver());
