clean up jpa/jpql parser, turn warnings into errors

Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
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());