diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactory.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactory.java
index af44ddc..d5902ae 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactory.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactory.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
@@ -20,11 +20,11 @@
 
 public interface PersistenceContextFactory {
 
-    public void close();
+    void close();
 
-    public void closePersistenceContext(String persistenceUnit);
+    void closePersistenceContext(String persistenceUnit);
 
-    public PersistenceContext get(String persistenceUnit, URI defaultURI, String version, Map<String, Object> initializationProperties);
+    PersistenceContext get(String persistenceUnit, URI defaultURI, String version, Map<String, Object> initializationProperties);
 
-    public Set<String> getPersistenceContextNames();
+    Set<String> getPersistenceContextNames();
 }
diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactoryProvider.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactoryProvider.java
index 6412fe9..9d13e1e 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactoryProvider.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/PersistenceContextFactoryProvider.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
@@ -18,5 +18,5 @@
 
 public interface PersistenceContextFactoryProvider {
 
-    public PersistenceContextFactory getPersistenceContextFactory(Map<String, Object> properties);
+    PersistenceContextFactory getPersistenceContextFactory(Map<String, Object> properties);
 }
diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DatabaseEventListenerFactory.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DatabaseEventListenerFactory.java
index 6666056..633117a 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DatabaseEventListenerFactory.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DatabaseEventListenerFactory.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
@@ -23,6 +23,6 @@
  */
 public interface DatabaseEventListenerFactory {
 
-    public DescriptorBasedDatabaseEventListener createDatabaseEventListener(Map<String, Object> properties);
+    DescriptorBasedDatabaseEventListener createDatabaseEventListener(Map<String, Object> properties);
 
 }
diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DescriptorBasedDatabaseEventListener.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DescriptorBasedDatabaseEventListener.java
index 5f883cd..9804d81 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DescriptorBasedDatabaseEventListener.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/eventlistener/DescriptorBasedDatabaseEventListener.java
@@ -32,9 +32,9 @@
     /**
      * Register for change notifications on a particular descriptor
      */
-    public void register(Session session, String queryName);
+    void register(Session session, String queryName);
 
-    public void addChangeListener(ChangeListener listener);
+    void addChangeListener(ChangeListener listener);
 
-    public void removeChangeListener(ChangeListener listener);
+    void removeChangeListener(ChangeListener listener);
 }
diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/features/FeatureSet.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/features/FeatureSet.java
index ba94d78..e1d4334 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/features/FeatureSet.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/features/FeatureSet.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -27,7 +27,7 @@
  * own implementation of this interface.
  */
 public interface FeatureSet {
-    public enum Feature {
+    enum Feature {
         /* Not pageable resources */
         NO_PAGING,
 
diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/util/list/PageableCollection.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/util/list/PageableCollection.java
index 4a23fd5..56f418d 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/util/list/PageableCollection.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/jpa/rs/util/list/PageableCollection.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -27,84 +27,84 @@
  * @see ReportQueryResultCollection
  */
 public interface PageableCollection<T> {
-    public List<T> getItems();
+    List<T> getItems();
 
-    public void setItems(List<T> items);
+    void setItems(List<T> items);
 
     /**
      * Sets hasMore
      *
      * @param hasMore the new checks for more
      */
-    public void setHasMore(Boolean hasMore);
+    void setHasMore(Boolean hasMore);
 
     /**
      * Returns true if collection has more
      *
      * @return the checks for more
      */
-    public Boolean getHasMore();
+    Boolean getHasMore();
 
     /**
      * Gets the total number of records in the current response.
      *
      * @return the count
      */
-    public Integer getCount();
+    Integer getCount();
 
     /**
      * Sets the count.
      *
      * @param count the new count
      */
-    public void setCount(Integer count);
+    void setCount(Integer count);
 
     /**
      * Gets the limit.
      *
      * @return the limit
      */
-    public Integer getLimit();
+    Integer getLimit();
 
     /**
      * Sets the limit.
      *
      * @param limit the new limit
      */
-    public void setLimit(Integer limit);
+    void setLimit(Integer limit);
 
     /**
      * Sets the offset.
      *
      * @param offset the new offset
      */
-    public void setOffset(Integer offset);
+    void setOffset(Integer offset);
 
     /**
      * Gets the offset.
      *
      * @return the offset
      */
-    public Integer getOffset();
+    Integer getOffset();
 
     /**
      * Gets the links.
      *
      * @return the links
      */
-    public List<LinkV2> getLinks();
+    List<LinkV2> getLinks();
 
     /**
      * Sets the links.
      *
      * @param links the new links
      */
-    public void setLinks(List<LinkV2> links);
+    void setLinks(List<LinkV2> links);
 
     /**
      * Adds the link.
      *
      * @param link the link
      */
-    public void addLink(LinkV2 link);
+    void addLink(LinkV2 link);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/interfaces/Project.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/interfaces/Project.java
index a2093fa..a119190 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/interfaces/Project.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/interfaces/Project.java
@@ -27,7 +27,7 @@
  *    @see LargeProject
  *    @see SmallProject
  */
-public abstract interface Project extends Serializable {
+public interface Project extends Serializable {
     String getDescription();
 
     BigDecimal getId();
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/interfaces/CompanyAsset.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/interfaces/CompanyAsset.java
index acf7942..60d9ba5 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/interfaces/CompanyAsset.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/interfaces/CompanyAsset.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
@@ -15,7 +15,7 @@
 package org.eclipse.persistence.testing.models.interfaces;
 
 public interface CompanyAsset extends Cloneable {
-    public Object clone();
+    Object clone();
 
-    public java.math.BigDecimal getSerNum();
+    java.math.BigDecimal getSerNum();
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/optimisticlocking/Skill.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/optimisticlocking/Skill.java
index 8a8cdb5..caff9bb 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/optimisticlocking/Skill.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/optimisticlocking/Skill.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
@@ -16,10 +16,10 @@
 
 public interface Skill {
 
-    public int getId();
-    public void setId(int id);
-    public String getName();
-    public void setName(String name);
-    public boolean isCool();
+    int getId();
+    void setId(int id);
+    String getName();
+    void setName(String name);
+    boolean isCool();
 
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Address.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Address.java
index 0117417..4e05e62 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Address.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Address.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
@@ -24,27 +24,27 @@
  * @since        08/15/2000 15:51:05
  */
 public interface Address {
-    public String getCity();
+    String getCity();
 
-    public String getCountry();
+    String getCountry();
 
-    public int getID();
+    int getID();
 
-    public String getPostalCode();
+    String getPostalCode();
 
-    public String getState();
+    String getState();
 
-    public String getStreet();
+    String getStreet();
 
-    public void setCity(String value);
+    void setCity(String value);
 
-    public void setCountry(String value);
+    void setCountry(String value);
 
-    public void setID(int value);
+    void setID(int value);
 
-    public void setPostalCode(String value);
+    void setPostalCode(String value);
 
-    public void setState(String value);
+    void setState(String value);
 
-    public void setStreet(String value);
+    void setStreet(String value);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Computer.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Computer.java
index 00304ff..4b8925b 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Computer.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Computer.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
@@ -15,15 +15,15 @@
 package org.eclipse.persistence.testing.tests.proxyindirection;
 
 public interface Computer  {
-    public int getId();
+    int getId();
 
-    public String getSerialNumber();
+    String getSerialNumber();
 
-    public String getDescription();
+    String getDescription();
 
-    public void setId(int id);
+    void setId(int id);
 
-    public void setDescription(String aDescription);
+    void setDescription(String aDescription);
 
-    public void setSerialNumber(String serialNumber);
+    void setSerialNumber(String serialNumber);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Contact.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Contact.java
index 8080dce..8cdb9bd 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Contact.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Contact.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
@@ -24,11 +24,11 @@
  * @since        08/25/2000 16:31:46
  */
 public interface Contact {
-    public int getID();
+    int getID();
 
-    public boolean isPublic();
+    boolean isPublic();
 
-    public void setID(int value);
+    void setID(int value);
 
-    public void setIsPublic(boolean value);
+    void setIsPublic(boolean value);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Cubicle.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Cubicle.java
index 2884ff9..84689ae 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Cubicle.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Cubicle.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
@@ -24,27 +24,27 @@
  * @since        08/15/2000 15:51:05
  */
 public interface Cubicle {
-    public Employee getEmployee();
+    Employee getEmployee();
 
-    public Computer getComputer();
+    Computer getComputer();
 
-    public float getHeight();
+    float getHeight();
 
-    public int getID();
+    int getID();
 
-    public float getLength();
+    float getLength();
 
-    public float getWidth();
+    float getWidth();
 
-    public void setEmployee(Employee value);
+    void setEmployee(Employee value);
 
-    public void setComputer(Computer value);
+    void setComputer(Computer value);
 
-    public void setHeight(float value);
+    void setHeight(float value);
 
-    public void setID(int value);
+    void setID(int value);
 
-    public void setLength(float value);
+    void setLength(float value);
 
-    public void setWidth(float value);
+    void setWidth(float value);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/DesktopComputer.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/DesktopComputer.java
index c0cf864..75e921a 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/DesktopComputer.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/DesktopComputer.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
@@ -15,7 +15,7 @@
 package org.eclipse.persistence.testing.tests.proxyindirection;
 
 public interface DesktopComputer extends Computer {
-    public int getMoniterSize();
+    int getMoniterSize();
 
-    public void setMoniterSize(int size);
+    void setMoniterSize(int size);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Employee.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Employee.java
index 6c29a1d..e4ade81 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Employee.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Employee.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
@@ -25,53 +25,53 @@
  * @since        08/15/2000 15:51:05
  */
 public interface Employee {
-    public void addManagedEmployee(Employee value);
+    void addManagedEmployee(Employee value);
 
-    public Address getAddress();
+    Address getAddress();
 
-    public int getAge();
+    int getAge();
 
-    public Contact getContact();
+    Contact getContact();
 
-    public int getCubicleID();
+    int getCubicleID();
 
-    public String getFirstName();
+    String getFirstName();
 
-    public String getGender();
+    String getGender();
 
-    public int getID();
+    int getID();
 
-    public String getLastName();
+    String getLastName();
 
-    public Collection getManagedEmployees();
+    Collection getManagedEmployees();
 
-    public Employee getManager();
+    Employee getManager();
 
-    public Project getProject();
+    Project getProject();
 
-    public LargeProject getLargeProject();
+    LargeProject getLargeProject();
 
-    public void setAddress(Address value);
+    void setAddress(Address value);
 
-    public void setAge(int value);
+    void setAge(int value);
 
-    public void setContact(Contact value);
+    void setContact(Contact value);
 
-    public void setCubicleID(int value);
+    void setCubicleID(int value);
 
-    public void setFirstName(String value);
+    void setFirstName(String value);
 
-    public void setGender(String value);
+    void setGender(String value);
 
-    public void setID(int value);
+    void setID(int value);
 
-    public void setLastName(String value);
+    void setLastName(String value);
 
-    public void setManagedEmployees(Collection value);
+    void setManagedEmployees(Collection value);
 
-    public void setManager(Employee value);
+    void setManager(Employee value);
 
-    public void setProject(Project value);
+    void setProject(Project value);
 
-    public void setLargeProject(LargeProject value);
+    void setLargeProject(LargeProject value);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/LargeProject.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/LargeProject.java
index a5ec004..f310d50 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/LargeProject.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/LargeProject.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
@@ -24,11 +24,11 @@
  * @since        08/24/2000 11:11:05
  */
 public interface LargeProject extends Project {
-    public double getBudget();
+    double getBudget();
 
-    public String getInvestor();
+    String getInvestor();
 
-    public void setBudget(double value);
+    void setBudget(double value);
 
-    public void setInvestor(String value);
+    void setInvestor(String value);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Project.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Project.java
index 9169b0b..817c76c 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Project.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/proxyindirection/Project.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
@@ -24,15 +24,15 @@
  * @since        08/23/2000 15:51:34
  */
 public interface Project {
-    public String getDescription();
+    String getDescription();
 
-    public int getID();
+    int getID();
 
-    public String getName();
+    String getName();
 
-    public void setDescription(String value);
+    void setDescription(String value);
 
-    public void setID(int value);
+    void setID(int value);
 
-    public void setName(String value);
+    void setName(String value);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManager.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManager.java
index 84eb807..6b89a94 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManager.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManager.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
@@ -18,5 +18,5 @@
 import org.eclipse.persistence.sessions.remote.rmi.*;
 
 public interface RMIServerManager extends Remote {
-public RMIRemoteSessionController createRemoteSessionController() throws RemoteException;
+RMIRemoteSessionController createRemoteSessionController() throws RemoteException;
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/sessionbroker/RMISessionBrokerServerManager.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/sessionbroker/RMISessionBrokerServerManager.java
index 27ba1f3..39aec95 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/sessionbroker/RMISessionBrokerServerManager.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/sessionbroker/RMISessionBrokerServerManager.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
@@ -21,5 +21,5 @@
 
 
 public interface RMISessionBrokerServerManager extends Remote {
-    public RMIRemoteSessionController createRemoteSessionController() throws RemoteException;
+    RMIRemoteSessionController createRemoteSessionController() throws RemoteException;
 }
diff --git a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManager.java b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManager.java
index bce2be7..199e1c7 100644
--- a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManager.java
+++ b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManager.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
@@ -18,5 +18,5 @@
 import org.eclipse.persistence.sessions.remote.rmi.iiop.*;
 
 public interface RMIServerManager extends Remote {
-public RMIRemoteSessionController createRemoteSessionController() throws RemoteException;
+RMIRemoteSessionController createRemoteSessionController() throws RemoteException;
 }
diff --git a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/RMIRemoteSessionController.java b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/RMIRemoteSessionController.java
index 5aa6006..27e8630 100644
--- a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/RMIRemoteSessionController.java
+++ b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/RMIRemoteSessionController.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
@@ -28,172 +28,172 @@
      * remote session
      * @param remoteTransporter The Transporter carrying the command to be executed on the remote session
      */
-    public Transporter processCommand(Transporter remoteTransporter) throws RemoteException;
+    Transporter processCommand(Transporter remoteTransporter) throws RemoteException;
 
     /**
      * Begin a transaction on the database.
      */
-    public Transporter beginTransaction() throws RemoteException;
+    Transporter beginTransaction() throws RemoteException;
 
     /**
      * Begin an early unit of work transaction.
      */
-    public Transporter beginEarlyTransaction() throws RemoteException;
+    Transporter beginEarlyTransaction() throws RemoteException;
 
     /**
      * To commit remote unit of work on the server side.
      */
-    public Transporter commitRootUnitOfWork(Transporter remoteUnitOfWork) throws RemoteException;
+    Transporter commitRootUnitOfWork(Transporter remoteUnitOfWork) throws RemoteException;
 
     /**
      * Commit a transaction on the database.
      */
-    public Transporter commitTransaction() throws RemoteException;
+    Transporter commitTransaction() throws RemoteException;
 
     /**
      * Used for closing cursored streams across RMI.
      */
-    public Transporter cursoredStreamClose(Transporter remoetCursoredStreamID) throws RemoteException;
+    Transporter cursoredStreamClose(Transporter remoetCursoredStreamID) throws RemoteException;
 
     /**
      * Retrieve next page size of objects from the remote cursored stream
      */
-    public Transporter cursoredStreamNextPage(Transporter remoteCursoredStream, int pageSize) throws RemoteException;
+    Transporter cursoredStreamNextPage(Transporter remoteCursoredStream, int pageSize) throws RemoteException;
 
     /**
      * INTERNAL:
      * Return the cursored stream size
      */
-    public Transporter cursoredStreamSize(Transporter cursoredStream) throws RemoteException;
+    Transporter cursoredStreamSize(Transporter cursoredStream) throws RemoteException;
 
     /**
      * To get remote cursor stub in a transporter
      */
-    public Transporter cursorSelectObjects(Transporter policy) throws RemoteException;
+    Transporter cursorSelectObjects(Transporter policy) throws RemoteException;
 
     /**
      * A remote query after serialization is executed locally.
      */
-    public Transporter executeNamedQuery(Transporter name, Transporter theClass, Transporter arguments) throws RemoteException;
+    Transporter executeNamedQuery(Transporter name, Transporter theClass, Transporter arguments) throws RemoteException;
 
     /**
      * To execute remote query on the server side.
      */
-    public Transporter executeQuery(Transporter query) throws RemoteException;
+    Transporter executeQuery(Transporter query) throws RemoteException;
 
     /**
      * To get the default read-only classes from the server side.
      **/
-    public Transporter getDefaultReadOnlyClasses() throws RemoteException;
+    Transporter getDefaultReadOnlyClasses() throws RemoteException;
 
     /**
      * To get descriptor from the server side
      */
-    public Transporter getDescriptor(Transporter domainClass) throws RemoteException;
+    Transporter getDescriptor(Transporter domainClass) throws RemoteException;
 
     /**
      * To get descriptor from the server side
      */
-    public Transporter getDescriptorForAlias(Transporter domainClass) throws RemoteException;
+    Transporter getDescriptorForAlias(Transporter domainClass) throws RemoteException;
 
     /**
      * To get login from the server side
      */
-    public Transporter getLogin() throws RemoteException;
+    Transporter getLogin() throws RemoteException;
 
     /**
      * INTERNAL:
      * Get the value returned by remote function call
      */
-    public Transporter getSequenceNumberNamed(Transporter remoteFunctionCall) throws RemoteException;
+    Transporter getSequenceNumberNamed(Transporter remoteFunctionCall) throws RemoteException;
 
-    public Transporter initializeIdentityMapsOnServerSession() throws RemoteException;
+    Transporter initializeIdentityMapsOnServerSession() throws RemoteException;
 
     /**
      * To instantiate remote value holder on the server side.
      */
-    public Transporter instantiateRemoteValueHolderOnServer(Transporter remoteValueHolder) throws RemoteException;
+    Transporter instantiateRemoteValueHolderOnServer(Transporter remoteValueHolder) throws RemoteException;
 
     /**
      * Rollback a transaction on the database.
      */
-    public Transporter rollbackTransaction() throws RemoteException;
+    Transporter rollbackTransaction() throws RemoteException;
 
     /**
      * Moves the cursor to the given row number in the result set
      */
-    public Transporter scrollableCursorAbsolute(Transporter remoteScrollableCursorOid, int rows) throws RemoteException;
+    Transporter scrollableCursorAbsolute(Transporter remoteScrollableCursorOid, int rows) throws RemoteException;
 
     /**
      * Moves the cursor to the end of the result set, just after the last row.
      */
-    public Transporter scrollableCursorAfterLast(Transporter remoteScrollableCursorOid) throws RemoteException;
+    Transporter scrollableCursorAfterLast(Transporter remoteScrollableCursorOid) throws RemoteException;
 
     /**
      * Moves the cursor to the front of the result set, just before the first row
      */
-    public Transporter scrollableCursorBeforeFirst(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorBeforeFirst(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * Used for closing scrollable cursor across RMI.
      */
-    public Transporter scrollableCursorClose(Transporter remoteScrollableCursorOid) throws RemoteException;
+    Transporter scrollableCursorClose(Transporter remoteScrollableCursorOid) throws RemoteException;
 
     /**
      * Retrieves the current row index number
      */
-    public Transporter scrollableCursorCurrentIndex(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorCurrentIndex(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * Moves the cursor to the first row in the result set
      */
-    public Transporter scrollableCursorFirst(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorFirst(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * Indicates whether the cursor is after the last row in the result set.
      */
-    public Transporter scrollableCursorIsAfterLast(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorIsAfterLast(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * Indicates whether the cursor is before the first row in the result set.
      */
-    public Transporter scrollableCursorIsBeforeFirst(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorIsBeforeFirst(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * Indicates whether the cursor is on the first row of the result set.
      */
-    public Transporter scrollableCursorIsFirst(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorIsFirst(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * Indicates whether the cursor is on the last row of the result set.
      */
-    public Transporter scrollableCursorIsLast(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorIsLast(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * Moves the cursor to the last row in the result set
      */
-    public Transporter scrollableCursorLast(Transporter remoteScrollableCursor) throws RemoteException;
+    Transporter scrollableCursorLast(Transporter remoteScrollableCursor) throws RemoteException;
 
     /**
      * INTERNAL:
      * Retrieve next object from the scrollable cursor
      */
-    public Transporter scrollableCursorNextObject(Transporter scrollableCursorOid) throws RemoteException;
+    Transporter scrollableCursorNextObject(Transporter scrollableCursorOid) throws RemoteException;
 
     /**
      * INTERNAL:
      * Retrieve previous object from the scrollable cursor
      */
-    public Transporter scrollableCursorPreviousObject(Transporter scrollableCursorOid) throws RemoteException;
+    Transporter scrollableCursorPreviousObject(Transporter scrollableCursorOid) throws RemoteException;
 
     /**
      * Moves the cursor to the given row number in the result set
      */
-    public Transporter scrollableCursorRelative(Transporter remoteScrollableCursor, int rows) throws RemoteException;
+    Transporter scrollableCursorRelative(Transporter remoteScrollableCursor, int rows) throws RemoteException;
 
     /**
      * INTERNAL:
      * Return the cursor size
      */
-    public Transporter scrollableCursorSize(Transporter cursoredStream) throws RemoteException;
+    Transporter scrollableCursorSize(Transporter cursoredStream) throws RemoteException;
 }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PerformanceComparisonTest.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PerformanceComparisonTest.java
index d3f0391..899ee29 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PerformanceComparisonTest.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PerformanceComparisonTest.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
@@ -22,74 +22,74 @@
  */
 public interface PerformanceComparisonTest extends TestEntity {
     /** Number of times to repeat the test run (to compute average/stddv) */
-    public static int REPEATS = 5;
+    int REPEATS = 5;
 
     /** Default total time to run each test run (default is 2s). */
-    public static int DEFAULT_TEST_TIME = 10000;
+    int DEFAULT_TEST_TIME = 10000;
 
     /** Default for allowable % difference between tests and baseline test. */
-    public static double DEFAULT_ALLOWABLE_DECREASE = -5;
+    double DEFAULT_ALLOWABLE_DECREASE = -5;
 
     /**
      * Return the count of the iterations.
      * This is maintained by the test to allow concurrent tests to manage the count.
      */
-    public int getIterations();
+    int getIterations();
 
     /**
      * Increment the iteration count.
      * This is maintained by the test to allow concurrent tests to manage the count.
      */
-    public void incrementIterations();
+    void incrementIterations();
 
     /**
      * Reset the iteration count.
      * This is maintained by the test to allow concurrent tests to manage the count.
      */
-    public void resetIterations();
+    void resetIterations();
 
     /**
      * Allows any test specific setup before starting the test run.
      */
-    public void startTest();
+    void startTest();
 
     /**
      * Allows any test specific setup before starting the test run.
      */
-    public void endTest();
+    void endTest();
 
     /**
      * Return the total time (ms) to run each of the test runs.
      * This is used to compute the number of test iterations to use,
      * the tests are then still timed based on that number of iterations.
      */
-    public long getTestRunTime();
+    long getTestRunTime();
 
     /**
      * Set the total time (ms) to run each of the test runs.
      * This is used to compute the number of test iterations to use,
      * the tests are then still timed based on that number of iterations.
      */
-    public void setTestRunTime(long testRunTime);
+    void setTestRunTime(long testRunTime);
 
     /**
      * Return the allowable percentage difference for test compared to the baseline.
      */
-    public double getAllowableDecrease();
+    double getAllowableDecrease();
 
     /**
      * Set the allowable percentage difference for test compared to the baseline.
      */
-    public void setAllowableDecrease(double allowableDecrease);
+    void setAllowableDecrease(double allowableDecrease);
 
     /**
      * Return the performance tests to compare the base-line with.
      */
-    public List getTests();
+    List getTests();
 
     /**
      * Add a performance tests to compare the base-line with.
      */
-    public void addTest(TestCase test);
+    void addTest(TestCase test);
 
 }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ResultInterface.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ResultInterface.java
index 6948e34..73faa0d 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ResultInterface.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ResultInterface.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
@@ -24,15 +24,15 @@
     /**
      * Return if test has passed or not.
      */
-    public boolean hasPassed();
+    boolean hasPassed();
 
     /**
      * Return if test should log the result.
      */
-    public boolean shouldLogResult();
+    boolean shouldLogResult();
 
     /**
      * Log the results on the print stream.
      */
-    public void logResult(Writer log);
+    void logResult(Writer log);
 }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestEntity.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestEntity.java
index 7aba00d..71f0bd0 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestEntity.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestEntity.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
@@ -21,84 +21,84 @@
  * This Interface is used by Test Framework.
  */
 public interface TestEntity extends junit.framework.Test, java.io.Serializable {
-    public static final int INITIAL_VALUE = -1;
+    int INITIAL_VALUE = -1;
 
     /**
      * Append test summaries of the collection of tests.
      */
-    public void appendTestResult(TestResultsSummary summary);
+    void appendTestResult(TestResultsSummary summary);
 
     /**
      * Computes the level for indentation.
      */
-    public void computeNestedLevel();
+    void computeNestedLevel();
 
     /**
      * The session is initialized to the default login from the Persistent System
      * if no explicit login is done for testing. This method must be overridden in
      * the subclasses if different login is required.
      */
-    public Session defaultLogin();
+    Session defaultLogin();
 
     /**
      * Executes the test entity in the collection.
      */
-    public void execute(TestExecutor executor) throws Throwable;
+    void execute(TestExecutor executor) throws Throwable;
 
     /**
      * Return the test collection which contains this test
      */
-    public TestEntity getContainer();
+    TestEntity getContainer();
 
     /**
      * Return the name of the test
      */
-    public String getName();
+    String getName();
 
-    public int getNestedCounter();
+    int getNestedCounter();
 
     /**
      * Return the test result.
      */
-    public ResultInterface getReport();
+    ResultInterface getReport();
 
 
     /**
      * Set the test result.
      */
-    public void setReport(ResultInterface testResult);
+    void setReport(ResultInterface testResult);
 
     /**
      * Increment the nested counter
      */
-    public void incrementNestedCounter();
+    void incrementNestedCounter();
 
     /**
      * Logs the test results to the print stream.
      * This mothed is added to migrate tests to Ora*Tst
      */
-    public void logRegressionResult(Writer log);
+    void logRegressionResult(Writer log);
 
     /**
      * Logs the test results to the print stream.
      */
-    public void logResult(Writer log);
+    void logResult(Writer log);
 
     /**
      * Logs the test results to the print stream.
      */
-    public void logResult(Writer log, boolean shouldLogOnlyErrors);
+    void logResult(Writer log, boolean shouldLogOnlyErrors);
 
-    public boolean requiresDatabase();
+    boolean requiresDatabase();
 
-    public void resetEntity();
+    void resetEntity();
 
-    public void resetNestedCounter();
+    void resetNestedCounter();
 
     /**
      * Set the test collection which contains this test
      */
-    public void setContainer(TestEntity testEntity);
+    void setContainer(TestEntity testEntity);
 
-    public void setNestedCounter(int level);
+    void setNestedCounter(int level);
 }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/SynchronizedTester.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/SynchronizedTester.java
index 86bd3b2..0e5d2ef 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/SynchronizedTester.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/SynchronizedTester.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
@@ -19,11 +19,11 @@
     /**
      * Stop the selected test.
      */
-    public void finishedTest();
+    void finishedTest();
 
     /**
      * Called whenever the part throws an exception.
      * @param exception java.lang.Throwable
      */
-    public void notifyException(Throwable exception);
+    void notifyException(Throwable exception);
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/annotations/Convert.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/annotations/Convert.java
index 6ea25d2..f0c021e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/annotations/Convert.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/annotations/Convert.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
@@ -75,34 +75,34 @@
      * Constant name for the reserved Java serialization converter.
      * This will serialize the
      */
-    public static final String SERIALIZED = "serialized";
+    String SERIALIZED = "serialized";
 
     /**
      * Constant name for the reserved class instance converter.
      * This will store the object's class name, and create a new instance of the class on read.
      */
-    public static final String CLASS_INSTANCE = "class-instance";
+    String CLASS_INSTANCE = "class-instance";
 
     /**
      * Constant name for the reserved XML converter.
      * This will use JAXB to convert the object to and from XML.
      */
-    public static final String XML = "xml";
+    String XML = "xml";
 
     /**
      * Constant name for the reserved JSON converter.
      * This will use EclipseLink Moxy JAXB to convert the object to and from JSON.
      */
-    public static final String JSON = "json";
+    String JSON = "json";
 
     /**
      * Constant name for the reserved Kryo converter.
      * This will use Kryo to convert the object to and from an optimized binary format.
      */
-    public static final String KRYO = "kryo";
+    String KRYO = "kryo";
 
     /**
      * Constant name for no converter.
      */
-    public static final String NONE = "none";
+    String NONE = "none";
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java
index 6c9051b..a329cb5 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java
@@ -613,7 +613,7 @@
      * INTERNAL:
      * This is the interface used to encapsulate the the type of key class element
      */
-    protected static interface KeyElementAccessor {
+    protected interface KeyElementAccessor {
         String getAttributeName();
         DatabaseField getDatabaseField();
         DatabaseMapping getMapping();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectCollectionsFactory.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectCollectionsFactory.java
index 17a8bff..ae49887 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectCollectionsFactory.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectCollectionsFactory.java
@@ -186,7 +186,7 @@
     /**
      * Define API providers of {@link IndirectCollection} implementations must conform to.
      */
-    public static interface IndirectCollectionsProvider {
+    public interface IndirectCollectionsProvider {
 
         /**
          * Class implementing {@link IndirectList}.
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/OptimisticLockingPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/OptimisticLockingPolicy.java
index 3ce2d23..367e285 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/OptimisticLockingPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/OptimisticLockingPolicy.java
@@ -277,7 +277,7 @@
      * @author Gordon Yorke
      * @since EclipseLink 2.0
      */
-    public enum LockOnChange{
+    enum LockOnChange{
         OWNING, // update version when an owning mapping changes
         NONE,
         ALL
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseType.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseType.java
index 97042fc..c5a8f2a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseType.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseType.java
@@ -84,7 +84,7 @@
     void logParameter(StringBuilder sb, Integer direction, PLSQLargument arg,
         AbstractRecord translationRow, DatabasePlatform platform);
 
-    public enum DatabaseTypeHelper {
+    enum DatabaseTypeHelper {
         databaseTypeHelper;
 
         static String getTruncatedSHA1Hash(String s) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/IdentityWeakHashMap.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/IdentityWeakHashMap.java
index 21bb5f4..4f09e6f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/IdentityWeakHashMap.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/IdentityWeakHashMap.java
@@ -689,7 +689,7 @@
         }
     }
 
-    static interface EntryReference<T> {
+    interface EntryReference<T> {
         T get();
     }
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/AliasableNode.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/AliasableNode.java
index 633b53e..ccb06ec 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/AliasableNode.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/AliasableNode.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
@@ -23,7 +23,7 @@
  */
 public interface AliasableNode {
 
-    public String getAlias();
+    String getAlias();
 
-    public void setAlias(String alias);
+    void setAlias(String alias);
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/NodeFactory.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/NodeFactory.java
index d3cea3e..16d9d13 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/NodeFactory.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/NodeFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 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
@@ -36,365 +36,365 @@
 public interface NodeFactory {
 
     /** Trim specification constants. */
-    public enum TrimSpecification { LEADING, TRAILING, BOTH }
+    enum TrimSpecification { LEADING, TRAILING, BOTH }
 
     // ------------------------------------------
     // Trees
     // ------------------------------------------
 
     /** */
-    public Object newSelectStatement(int line, int column,
-                                     Object select, Object from,
-                                     Object where, Object groupBy,
-                                     Object having, Object orderBy);
+    Object newSelectStatement(int line, int column,
+                              Object select, Object from,
+                              Object where, Object groupBy,
+                              Object having, Object orderBy);
 
     /** */
-    public Object newUpdateStatement(int line, int column,
-                                     Object update, Object set, Object where);
+    Object newUpdateStatement(int line, int column,
+                              Object update, Object set, Object where);
 
     /** */
-    public Object newDeleteStatement(int line, int column,
-                                     Object delete, Object where);
+    Object newDeleteStatement(int line, int column,
+                              Object delete, Object where);
 
     // ------------------------------------------
     // Top level nodes
     // ------------------------------------------
 
     /** */
-    public Object newSelectClause(int line, int column,
-                                  boolean distinct, List selectExprs);
+    Object newSelectClause(int line, int column,
+                           boolean distinct, List selectExprs);
 
-    public Object newSelectClause(int line, int column, boolean distinct, List selectExprs, List identifiers);
+    Object newSelectClause(int line, int column, boolean distinct, List selectExprs, List identifiers);
 
     /** */
-    public Object newFromClause(int line, int column, List varDecls);
+    Object newFromClause(int line, int column, List varDecls);
 
     /** */
-    public Object newWhereClause(int line, int column, Object condition);
+    Object newWhereClause(int line, int column, Object condition);
 
     /** */
-    public Object newGroupByClause(int line, int column, List items);
+    Object newGroupByClause(int line, int column, List items);
 
     /** */
-    public Object newHavingClause(int line, int column, Object arg);
+    Object newHavingClause(int line, int column, Object arg);
 
     /** */
-    public Object newOrderByClause(int line, int column, List items);
+    Object newOrderByClause(int line, int column, List items);
 
     /** */
-    public Object newUpdateClause(int line, int column,
-                                  String schema, String variable);
+    Object newUpdateClause(int line, int column,
+                           String schema, String variable);
 
     /** */
-    public Object newDeleteClause(int line, int column,
-                                  String schema, String variable);
+    Object newDeleteClause(int line, int column,
+                           String schema, String variable);
 
     // ------------------------------------------
     // Variable declaration nodes
     // ------------------------------------------
 
     /** */
-    public Object newRangeVariableDecl(int line, int column,
-                                       String schema, String variable);
+    Object newRangeVariableDecl(int line, int column,
+                                String schema, String variable);
 
     /** */
-    public Object newJoinVariableDecl(int line, int column, boolean outer,
-                                      Object path, String variable, Object downcast);
+    Object newJoinVariableDecl(int line, int column, boolean outer,
+                               Object path, String variable, Object downcast);
 
     /** */
-    public Object newFetchJoin(int line, int column, boolean outer, Object path);
+    Object newFetchJoin(int line, int column, boolean outer, Object path);
 
     /** */
-    public Object newCollectionMemberVariableDecl(int line, int column,
-                                                  Object path, String variable);
+    Object newCollectionMemberVariableDecl(int line, int column,
+                                           Object path, String variable);
 
     /** */
-    public Object newVariableDecl(int line, int column,
-                                  Object path, String variable);
+    Object newVariableDecl(int line, int column,
+                           Object path, String variable);
 
     // ------------------------------------------
     // Identifier and path expression nodes
     // ------------------------------------------
 
     /** */
-    public Object newDot(int line, int column, Object left, Object right);
+    Object newDot(int line, int column, Object left, Object right);
 
     /** */
-    public Object newVariableAccessOrTypeConstant(int line, int column, String identifier);
+    Object newVariableAccessOrTypeConstant(int line, int column, String identifier);
 
     /** */
-    public Object newAttribute(int line, int column, String identifier);
+    Object newAttribute(int line, int column, String identifier);
 
     /** */
-    public Object newQualifiedAttribute(int line, int column,
-                                        String variable, String attribute);
+    Object newQualifiedAttribute(int line, int column,
+                                 String variable, String attribute);
 
     // ------------------------------------------
     // Aggregate nodes
     // ------------------------------------------
 
     /** */
-    public Object newAvg(int line, int column, boolean ditinct, Object arg);
+    Object newAvg(int line, int column, boolean ditinct, Object arg);
 
     /** */
-    public Object newMax(int line, int column, boolean ditinct, Object arg);
+    Object newMax(int line, int column, boolean ditinct, Object arg);
 
     /** */
-    public Object newMin(int line, int column, boolean ditinct, Object arg);
+    Object newMin(int line, int column, boolean ditinct, Object arg);
 
     /** */
-    public Object newSum(int line, int column, boolean ditinct, Object arg);
+    Object newSum(int line, int column, boolean ditinct, Object arg);
 
     /** */
-    public Object newCount(int line, int column, boolean ditinct, Object arg);
+    Object newCount(int line, int column, boolean ditinct, Object arg);
 
     // ------------------------------------------
     // Binary expression nodes
     // ------------------------------------------
 
     /** */
-    public Object newOr(int line, int column, Object left, Object right);
+    Object newOr(int line, int column, Object left, Object right);
 
     /** */
-    public Object newAnd(int line, int column, Object left, Object right);
+    Object newAnd(int line, int column, Object left, Object right);
 
     /** */
-    public Object newEquals(int line, int column, Object left, Object right);
+    Object newEquals(int line, int column, Object left, Object right);
 
     /** */
-    public Object newNotEquals(int line, int column, Object left, Object right);
+    Object newNotEquals(int line, int column, Object left, Object right);
 
     /** */
-    public Object newGreaterThan(int line, int column, Object left, Object right);
+    Object newGreaterThan(int line, int column, Object left, Object right);
 
     /** */
-    public Object newGreaterThanEqual(int line, int column,
-                                      Object left, Object right);
+    Object newGreaterThanEqual(int line, int column,
+                               Object left, Object right);
 
     /** */
-    public Object newLessThan(int line, int column, Object left, Object right);
+    Object newLessThan(int line, int column, Object left, Object right);
 
     /** */
-    public Object newLessThanEqual(int line, int column,
-                                   Object left, Object right);
+    Object newLessThanEqual(int line, int column,
+                            Object left, Object right);
 
     /** */
-    public Object newPlus(int line, int column, Object left, Object right);
+    Object newPlus(int line, int column, Object left, Object right);
 
     /** */
-    public Object newMinus(int line, int column, Object left, Object right);
+    Object newMinus(int line, int column, Object left, Object right);
 
     /** */
-    public Object newMultiply(int line, int column, Object left, Object right);
+    Object newMultiply(int line, int column, Object left, Object right);
 
     /** */
-    public Object newDivide(int line, int column, Object left, Object right);
+    Object newDivide(int line, int column, Object left, Object right);
 
     // ------------------------------------------
     // Unary expression nodes
     // ------------------------------------------
 
     /** */
-    public Object newUnaryPlus(int line, int column, Object arg);
+    Object newUnaryPlus(int line, int column, Object arg);
 
     /** */
-    public Object newUnaryMinus(int line, int column, Object arg);
+    Object newUnaryMinus(int line, int column, Object arg);
 
     /** */
-    public Object newNot(int line, int column, Object arg);
+    Object newNot(int line, int column, Object arg);
 
     // ------------------------------------------
     // Conditional expression nodes
     // ------------------------------------------
 
     /** */
-    public Object newBetween(int line, int column, boolean not, Object arg,
-                             Object lower, Object upper);
+    Object newBetween(int line, int column, boolean not, Object arg,
+                      Object lower, Object upper);
 
     /** */
-    public Object newLike(int line, int column, boolean not, Object string,
-                          Object pattern, Object escape) ;
+    Object newLike(int line, int column, boolean not, Object string,
+                   Object pattern, Object escape) ;
 
     /** */
-    public Object newEscape(int line, int column, Object arg);
+    Object newEscape(int line, int column, Object arg);
 
     /** */
-    public Object newIn(int line, int column,
-                        boolean not, Object expr, List items);
+    Object newIn(int line, int column,
+                 boolean not, Object expr, List items);
 
     /** */
-    public Object newIsNull(int line, int column, boolean not, Object expr);
+    Object newIsNull(int line, int column, boolean not, Object expr);
 
     /** */
-    public Object newIsEmpty(int line, int column, boolean not, Object expr) ;
+    Object newIsEmpty(int line, int column, boolean not, Object expr) ;
 
     /** */
-    public Object newMemberOf(int line, int column, boolean not,
-                              Object expr, Object collection);
+    Object newMemberOf(int line, int column, boolean not,
+                       Object expr, Object collection);
 
     // ------------------------------------------
     // Parameter nodes
     // ------------------------------------------
 
     /** */
-    public Object newPositionalParameter(int line, int colimn, String position);
+    Object newPositionalParameter(int line, int colimn, String position);
 
     /** */
-    public Object newNamedParameter(int line, int colimn, String name);
+    Object newNamedParameter(int line, int colimn, String name);
 
     // ------------------------------------------
     // Literal nodes
     // ------------------------------------------
 
     /** */
-    public Object newBooleanLiteral(int line, int column, Object value);
+    Object newBooleanLiteral(int line, int column, Object value);
 
     /** */
-    public Object newIntegerLiteral(int line, int column, Object value);
+    Object newIntegerLiteral(int line, int column, Object value);
 
     /** */
-    public Object newLongLiteral(int line, int column, Object value);
+    Object newLongLiteral(int line, int column, Object value);
 
     /** */
-    public Object newFloatLiteral(int line, int column, Object value);
+    Object newFloatLiteral(int line, int column, Object value);
 
     /** */
-    public Object newDoubleLiteral(int line, int column, Object value);
+    Object newDoubleLiteral(int line, int column, Object value);
 
     /** */
-    public Object newStringLiteral(int line, int column, Object value);
+    Object newStringLiteral(int line, int column, Object value);
 
     /** */
-    public Object newNullLiteral(int line, int column);
+    Object newNullLiteral(int line, int column);
 
     // ------------------------------------------
     // Objects for functions returning strings
     // ------------------------------------------
 
     /** */
-    public Object newConcat(int line, int column, List objects);
+    Object newConcat(int line, int column, List objects);
 
     /** */
-    public Object newSubstring(int line, int column,
-                               Object string, Object start, Object length);
+    Object newSubstring(int line, int column,
+                        Object string, Object start, Object length);
 
     /** */
-    public Object newTrim(int line, int column, TrimSpecification trimSpec,
-                          Object trimChar, Object string);
+    Object newTrim(int line, int column, TrimSpecification trimSpec,
+                   Object trimChar, Object string);
 
     /** */
-    public Object newLower(int line, int column, Object arg);
+    Object newLower(int line, int column, Object arg);
 
     /** */
-    public Object newUpper(int line, int column, Object arg);
+    Object newUpper(int line, int column, Object arg);
 
     // ------------------------------------------
     // Objects for functions returning numerics
     // ------------------------------------------
 
     /** */
-    public Object newLocate(int line, int column,
-                            Object pattern, Object arg, Object startPos);
+    Object newLocate(int line, int column,
+                     Object pattern, Object arg, Object startPos);
 
     /** */
-    public Object newLength(int line, int column, Object arg);
+    Object newLength(int line, int column, Object arg);
 
     /** */
-    public Object newAbs(int line, int column, Object arg);
+    Object newAbs(int line, int column, Object arg);
 
     /** */
-    public Object newSqrt(int line, int column, Object arg);
+    Object newSqrt(int line, int column, Object arg);
 
     /** */
-    public Object newMod(int line, int column, Object left, Object right);
+    Object newMod(int line, int column, Object left, Object right);
 
     /** */
-    public Object newSize(int line, int column, Object arg);
+    Object newSize(int line, int column, Object arg);
 
     // ------------------------------------------
     // Objects for functions returning datetime
     // ------------------------------------------
 
     /** */
-    public Object newCurrentDate(int line, int column);
+    Object newCurrentDate(int line, int column);
 
     /** */
-    public Object newCurrentTime(int line, int column);
+    Object newCurrentTime(int line, int column);
 
     /** */
-    public Object newCurrentTimestamp(int line, int column);
+    Object newCurrentTimestamp(int line, int column);
 
     // ------------------------------------------
     // Custom function
     // ------------------------------------------
 
     /** */
-    public Object newFunc(int line, int column, String name, List parameters);
+    Object newFunc(int line, int column, String name, List parameters);
 
     // ------------------------------------------
     // Subquery nodes
     // ------------------------------------------
 
     /** */
-    public Object newSubquery(int line, int column, Object select, Object from, Object where,
-                              Object groupBy, Object having);
+    Object newSubquery(int line, int column, Object select, Object from, Object where,
+                       Object groupBy, Object having);
 
     /** */
-    public Object newExists(int line, int column, boolean not, Object subquery);
+    Object newExists(int line, int column, boolean not, Object subquery);
 
     /** */
-    public Object newIn(int line, int column, boolean not, Object expr, Object subquery);
+    Object newIn(int line, int column, boolean not, Object expr, Object subquery);
 
     /** */
-    public Object newAll(int line, int column, Object subquery);
+    Object newAll(int line, int column, Object subquery);
 
     /** */
-    public Object newAny(int line, int column, Object subquery);
+    Object newAny(int line, int column, Object subquery);
 
     /** */
-    public Object newSome(int line, int column, Object subquery);
+    Object newSome(int line, int column, Object subquery);
 
     // ------------------------------------------
     // Miscellaneous nodes
     // ------------------------------------------
 
     /** */
-    public Object newAscOrdering(int line, int column, Object arg);
+    Object newAscOrdering(int line, int column, Object arg);
 
     /** */
-    public Object newDescOrdering(int line, int column, Object arg);
+    Object newDescOrdering(int line, int column, Object arg);
 
     /** */
-    public Object newConstructor(int line, int colimn,
-                                 String className, List args);
+    Object newConstructor(int line, int colimn,
+                          String className, List args);
 
     /** */
-    public Object newSetClause(int line, int colimn, List assignments);
+    Object newSetClause(int line, int colimn, List assignments);
 
     /** */
-    public Object newSetAssignmentClause(int line, int column,
-                                         Object target, Object value);
+    Object newSetAssignmentClause(int line, int column,
+                                  Object target, Object value);
 
-    public Object newKey(int line, int column, Object left);
+    Object newKey(int line, int column, Object left);
 
-    public Object newMapEntry(int line, int column, Object arg);
+    Object newMapEntry(int line, int column, Object arg);
 
-    public Object newType(int line, int column, Object left);
+    Object newType(int line, int column, Object left);
 
-    public Object newCaseClause(int line, int column, Object base, List whenClauses, Object elseClause);
+    Object newCaseClause(int line, int column, Object base, List whenClauses, Object elseClause);
 
-    public Object newCoalesceClause(int line, int column, List clauses);
+    Object newCoalesceClause(int line, int column, List clauses);
 
-    public Object newNullIfClause(int line, int column, Object left, Object right);
+    Object newNullIfClause(int line, int column, Object left, Object right);
 
-    public Object newWhenClause(int line, int column, Object conditionClause, Object theClause);
+    Object newWhenClause(int line, int column, Object conditionClause, Object theClause);
 
-    public Object newIndex(int line, int column, Object object);
+    Object newIndex(int line, int column, Object object);
 
-    public Object newDateLiteral(int line, int column, Object object);
+    Object newDateLiteral(int line, int column, Object object);
 
-    public Object newTimeLiteral(int line, int column, Object object);
+    Object newTimeLiteral(int line, int column, Object object);
 
-    public Object newTimeStampLiteral(int line, int column, Object object);
+    Object newTimeStampLiteral(int line, int column, Object object);
 }
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/TypeHelper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/TypeHelper.java
index 1b67c9e..48ca124 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/TypeHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/TypeHelper.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
@@ -23,146 +23,146 @@
 public interface TypeHelper {
 
     /** Returns the name of the specified type. */
-    public String getTypeName(Object type);
+    String getTypeName(Object type);
 
     /** Returns the class object of the specified type. */
-    public Class getJavaClass(Object type);
+    Class getJavaClass(Object type);
 
     /** Returns a type representation for the specified type name or null if
      * there is no such type. */
-    public Object resolveTypeName(String typeName);
+    Object resolveTypeName(String typeName);
 
     /** Returns the type of the attribute with the specified name in the
      * specified owner class. */
-    public Object resolveAttribute(Object ownerClass, String attribute);
+    Object resolveAttribute(Object ownerClass, String attribute);
 
     /**
      * Returns a query key associated with the name of the attribute
      */
-    public QueryKey resolveQueryKey(Object ownerClass, String attribute);
+    QueryKey resolveQueryKey(Object ownerClass, String attribute);
 
     /** Returns the type of the map key for the mapping on ownerClass named attribute
      * Returns null if that mapping does not exist or does not contain a map key
      */
-    public Object resolveMapKey(Object ownerClass, String attribute);
+    Object resolveMapKey(Object ownerClass, String attribute);
 
     /** Returns the type of the class corresponding to the specified abstract
      * schema type. */
-    public Object resolveSchema(String schemaName);
+    Object resolveSchema(String schemaName);
 
     /** Returns the enum constant if the specified type denotes an enum type
      * and the specified constant denotes a constant of the enum type. */
-    public Object resolveEnumConstant(Object enumType, String constant);
+    Object resolveEnumConstant(Object enumType, String constant);
 
     /** Returns the type representation of class Object.*/
-    public Object getObjectType();
+    Object getObjectType();
 
     /** Returns the boolean type representation.*/
-    public Object getBooleanType();
+    Object getBooleanType();
 
     /** Returns the char type representation.*/
-    public Object getCharType();
+    Object getCharType();
 
     /** Returns the char type representation.*/
-    public Object getSQLDateType();
+    Object getSQLDateType();
 
     /** Returns the char type representation.*/
-    public Object getTimeType();
+    Object getTimeType();
 
     /** Returns the char type representation.*/
-    public Object getTimestampType();
+    Object getTimestampType();
 
     /** Returns the int type representation.*/
-    public Object getIntType();
+    Object getIntType();
 
     /** Returns the long type representation.*/
-    public Object getLongType();
+    Object getLongType();
 
     /** Returns the type representation of class Long.*/
-    public Object getLongClassType();
+    Object getLongClassType();
 
     /** Returns the type representation of class Map.Entry.*/
-    public Object getMapEntryType();
+    Object getMapEntryType();
 
     /** Returns the float type representation.*/
-    public Object getFloatType();
+    Object getFloatType();
 
     /** Returns the double type representation.*/
-    public Object getDoubleType();
+    Object getDoubleType();
 
     /** Returns the type representation of class Double.*/
-    public Object getDoubleClassType();
+    Object getDoubleClassType();
 
     /** Returns the type representation oc class String.*/
-    public Object getStringType();
+    Object getStringType();
 
     /** Returns the type representation of class BigInteger.*/
-    public Object getBigIntegerType();
+    Object getBigIntegerType();
 
     /** Returns the type representation of class BigDecimal.*/
-    public Object getBigDecimalType();
+    Object getBigDecimalType();
 
     /** Returns true if the specified type denotes an enum type. */
-    public boolean isEnumType(Object type);
+    boolean isEnumType(Object type);
 
     /** Returns true if the specified type represents an
      * integral type (or wrapper), a floating point type (or wrapper),
      * BigInteger or BigDecimal. */
-    public boolean isNumericType(Object type);
+    boolean isNumericType(Object type);
 
     /** Returns true if the specified type represents an
      * integral type or a wrapper class of an integral type. */
-    public boolean isIntegralType(Object type);
+    boolean isIntegralType(Object type);
 
     /** Returns true if the specified type represents an floating point type
      * or a wrapper class of an floating point type. */
-    public boolean isFloatingPointType(Object type);
+    boolean isFloatingPointType(Object type);
 
     /** Returns true if the specified type represents java.lang.String. */
-    public boolean isStringType(Object type);
+    boolean isStringType(Object type);
 
     /** Returns true if the specified type represents java.math.BigInteger. */
-    public boolean isBigIntegerType(Object type);
+    boolean isBigIntegerType(Object type);
 
     /** Returns true if the specified type represents java.math.BigDecimal. */
-    public boolean isBigDecimalType(Object type);
+    boolean isBigDecimalType(Object type);
 
     /** Returns true if the specified type denotes an orderable type. */
-    public boolean isOrderableType(Object type);
+    boolean isOrderableType(Object type);
 
     /** Returns true if the specified type denotes an entity class. */
-    public boolean isEntityClass(Object type);
+    boolean isEntityClass(Object type);
 
     /** Returns true if the specified type denotes an embedded class. */
-    public boolean isEmbeddable(Object type);
+    boolean isEmbeddable(Object type);
 
     /** Returns true if the specified type denotes an embedded attribute. */
-    public boolean isEmbeddedAttribute(Object ownerClass, String attribute);
+    boolean isEmbeddedAttribute(Object ownerClass, String attribute);
 
     /** Returns true if the specified type denotes a simple state attribute. */
-    public boolean isSimpleStateAttribute(Object ownerClass, String attribute);
+    boolean isSimpleStateAttribute(Object ownerClass, String attribute);
 
     /** Returns true if the specified attribute denotes a single valued
      * or collection valued relationship attribute.
      */
-    public boolean isRelationship(Object ownerClass, String attribute);
+    boolean isRelationship(Object ownerClass, String attribute);
 
     /** Returns true if the specified attribute denotes a single valued
      * relationship attribute.
      */
-    public boolean isSingleValuedRelationship(
-        Object ownerClass, String attribute);
+    boolean isSingleValuedRelationship(
+            Object ownerClass, String attribute);
 
     /** Returns true if the specified attribute denotes a collection valued
      * relationship attribute.
      */
-    public boolean isCollectionValuedRelationship(
-        Object ownerClass, String attribute);
+    boolean isCollectionValuedRelationship(
+            Object ownerClass, String attribute);
 
     /** Returns true if left is assignable from right. */
-    public boolean isAssignableFrom(Object left, Object right);
+    boolean isAssignableFrom(Object left, Object right);
 
     /** Binary numeric promotion as specified in the JLS, extended by
      * wrapper classes, BigDecimal and BigInteger.  */
-    public Object extendedBinaryNumericPromotion(Object left, Object right);
+    Object extendedBinaryNumericPromotion(Object left, Object right);
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Marshaller.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Marshaller.java
index a730986..bd25341 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Marshaller.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Marshaller.java
@@ -246,7 +246,7 @@
      * <p>An implementation of Marshaller.Listener can be set on an Marshaller
      * to provide additional behaviour during marshal operations.</p>
      */
-    public static interface Listener {
+    public interface Listener {
 
         /**
          * This event  will be called after an object is marshalled.
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java
index 02655e9..cb6d789 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java
@@ -200,12 +200,12 @@
      *
      * @param nestedArray flag.
      */
-    public void setNestedArray(boolean nestedArray);
+    void setNestedArray(boolean nestedArray);
 
     /**
      * INTERNAL:
      *
      * @return True if content is nested array.
      */
-    public boolean isNestedArray();
+    boolean isNestedArray();
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/MarshalRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/MarshalRecord.java
index 5542f97..34f4218 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/MarshalRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/MarshalRecord.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -151,7 +151,7 @@
     /**
      * A Stack-like List, used to detect object cycles during marshal operations.
      */
-    public static class CycleDetectionStack<E> extends AbstractList<Object> {
+    class CycleDetectionStack<E> extends AbstractList<Object> {
 
         private Object[] data = new Object[8];
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLRecord.java
index be4b10b..d085d11 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLRecord.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -23,7 +23,7 @@
     /**
      * Nil: This is used to indicate that this field represents xsi:nil="true"
      */
-    public static class Nil {
+    class Nil {
         private Nil() {
         }
     }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/json/JsonParserReader.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/json/JsonParserReader.java
index 567694e..98c15c4 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/json/JsonParserReader.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/json/JsonParserReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 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
@@ -235,7 +235,7 @@
     /**
      * JsonStructure builder
      */
-    private static interface JsonStructureBuilder {
+    private interface JsonStructureBuilder {
         JsonStructure build();
 
         void add(JsonValue value);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/annotations/XmlVariableNode.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/annotations/XmlVariableNode.java
index eb6c4ff..a70eb1a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/annotations/XmlVariableNode.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/annotations/XmlVariableNode.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
@@ -46,7 +46,7 @@
      * signal that the type be inferred from the signature
      * of the property.
      */
-    static final class DEFAULT {}
+    final class DEFAULT {}
 
     boolean attribute() default false;
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java
index cd593b3..1e60e1a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java
@@ -989,7 +989,7 @@
         }
     }
 
-    protected static interface Output {
+    protected interface Output {
 
         void flush() throws IOException;
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/SessionEventListener.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/SessionEventListener.java
index a68ea91..9c865a0 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/SessionEventListener.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/SessionEventListener.java
@@ -137,7 +137,7 @@
      * The event contains the call and call result.
      * This differs from query execution in that the call has been translated.
      */
-    public void postExecuteCall(SessionEvent event);
+    void postExecuteCall(SessionEvent event);
 
     /**
      * PUBLIC:
@@ -213,7 +213,7 @@
      * The event contains the call to be executed.
      * This differs from query execution in that the call has been translated.
      */
-    public void preExecuteCall(SessionEvent event);
+    void preExecuteCall(SessionEvent event);
 
     /**
      * PUBLIC:
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/UnitOfWork.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/UnitOfWork.java
index d70985b..041faec 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/UnitOfWork.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/UnitOfWork.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 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
@@ -53,7 +53,7 @@
      * <p>
      * By default the commit of a set of the same entity type is ordered by primary key.
      */
-    public enum CommitOrderType {
+    enum CommitOrderType {
         /** Updates and deletes are ordered by the object's id.  This can help avoid deadlocks on highly concurrent systems. */
         ID,
         /** Updates are ordered by the object's changes, then by id.  This can improve batch writing efficiency. */
diff --git a/foundation/org.eclipse.persistence.extension/src/main/java/org/eclipse/persistence/logging/slf4j/SLF4JLogger.java b/foundation/org.eclipse.persistence.extension/src/main/java/org/eclipse/persistence/logging/slf4j/SLF4JLogger.java
index 51a73ef..cae666e 100644
--- a/foundation/org.eclipse.persistence.extension/src/main/java/org/eclipse/persistence/logging/slf4j/SLF4JLogger.java
+++ b/foundation/org.eclipse.persistence.extension/src/main/java/org/eclipse/persistence/logging/slf4j/SLF4JLogger.java
@@ -33,7 +33,7 @@
 public class SLF4JLogger extends AbstractSessionLog {
 
     /** Logger callback interface. */
-    private static interface LoggerCall {
+    private interface LoggerCall {
         void log(final Logger logger, final String msg, final Throwable t);
         void log(final Logger logger, final String message);
     }
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/framework/PUPropertiesProvider.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/framework/PUPropertiesProvider.java
index acf84f8..d6c8260 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/framework/PUPropertiesProvider.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/framework/PUPropertiesProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2015 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -25,6 +25,6 @@
  */
 public interface PUPropertiesProvider {
 
-    public Map<String, Object> getAdditionalPersistenceProperties(String puName);
+    Map<String, Object> getAdditionalPersistenceProperties(String puName);
 
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/cascadedeletes/PersistentIdentity.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/cascadedeletes/PersistentIdentity.java
index aca34df..a107969 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/cascadedeletes/PersistentIdentity.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/cascadedeletes/PersistentIdentity.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
@@ -13,6 +13,6 @@
 package org.eclipse.persistence.testing.models.jpa.cascadedeletes;
 
 public interface PersistentIdentity {
-    public int getId();
+    int getId();
 
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Equipment.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Equipment.java
index 8eb65fc..ace9c1f 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Equipment.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Equipment.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
@@ -21,14 +21,14 @@
 
 public interface Equipment {
 
-    public long getEntityId();
+    long getEntityId();
 
-    public String getId();
-    public void setId( String id );
+    String getId();
+    void setId(String id);
 
-    public List<Port> getPorts();
-    public void setPorts( ArrayList<org.eclipse.persistence.testing.models.jpa.ddlgeneration.weaving.Port> ports );
+    List<Port> getPorts();
+    void setPorts(ArrayList<org.eclipse.persistence.testing.models.jpa.ddlgeneration.weaving.Port> ports);
 
-    public Port removePort(int i);
-    public void addPort(Port p3);
+    Port removePort(int i);
+    void addPort(Port p3);
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Port.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Port.java
index 4571a9d..f9a7180 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Port.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/ddlgeneration/weaving/Port.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
@@ -17,17 +17,17 @@
 
 public interface Port {
 
-    public long getEntityId();
+    long getEntityId();
 
-    public String getId();
-    public void setId( String id );
+    String getId();
+    void setId(String id);
 
-    public int getPortOrder();
-    public void setPortOrder(int portOrder);
+    int getPortOrder();
+    void setPortOrder(int portOrder);
 
-    public Equipment getEquipment();
-    public void setEquipment(Equipment equipment);
+    Equipment getEquipment();
+    void setEquipment(Equipment equipment);
 
-    public Equipment getVirtualEquipment();
-    public void setVirtualEquipment(Equipment equipment);
+    Equipment getVirtualEquipment();
+    void setVirtualEquipment(Equipment equipment);
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/ParentInterface.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/ParentInterface.java
index 075a6cf..b253cf2 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/ParentInterface.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/ParentInterface.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
@@ -18,19 +18,19 @@
 
 public interface ParentInterface {
 
-    public void addChild(Child cs);
+    void addChild(Child cs);
 
-    public List<Child> getChildren();
+    List<Child> getChildren();
 
-    public Integer getId();
+    Integer getId();
 
-    public String getSerialNumber();
+    String getSerialNumber();
 
-    public int getVersion();
+    int getVersion();
 
-    public void setChildren(List<Child> children);
+    void setChildren(List<Child> children);
 
-    public void setId(Integer id);
+    void setId(Integer id);
 
-    public void setSerialNumber(String serialNumber);
+    void setSerialNumber(String serialNumber);
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inherited/CityNumberPair.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inherited/CityNumberPair.java
index 04d7d07..17560c1 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inherited/CityNumberPair.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inherited/CityNumberPair.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
@@ -20,11 +20,11 @@
 
 public interface CityNumberPair {
 
-    public String getCity() ;
+    String getCity() ;
 
-    public int getNumber();
+    int getNumber();
 
-    public void setCity(String city);
+    void setCity(String city);
 
-    public void setNumber(int number);
+    void setNumber(int number);
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Distributor.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Distributor.java
index 1903eed..ef9e9fc 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Distributor.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Distributor.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
@@ -16,5 +16,5 @@
 package org.eclipse.persistence.testing.models.jpa.relationships;
 
 public interface Distributor {
-    public String getName();
+    String getName();
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Facade.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Facade.java
index 15f7836..bc1c855 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Facade.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Facade.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
@@ -16,5 +16,5 @@
 package org.eclipse.persistence.testing.models.jpa.relationships;
 
 public interface Facade {
-    public String getCost();
+    String getCost();
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Manufacturer.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Manufacturer.java
index 455cea4..45590a5 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Manufacturer.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/relationships/Manufacturer.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
@@ -16,5 +16,5 @@
 package org.eclipse.persistence.testing.models.jpa.relationships;
 
 public interface Manufacturer {
-    public String getName();
+    String getName();
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Distributor.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Distributor.java
index 5007ae6..046aade 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Distributor.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Distributor.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
@@ -16,5 +16,5 @@
 package org.eclipse.persistence.testing.models.jpa.xml.relationships;
 
 public interface Distributor {
-    public String getName();
+    String getName();
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Manufacturer.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Manufacturer.java
index fc455a1..df55db1 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Manufacturer.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/Manufacturer.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
@@ -16,5 +16,5 @@
 package org.eclipse.persistence.testing.models.jpa.xml.relationships;
 
 public interface Manufacturer {
-    public String getName();
+    String getName();
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/sessionbean/EntityListenerTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/sessionbean/EntityListenerTest.java
index da7c0e2..57f73a8 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/sessionbean/EntityListenerTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/sessionbean/EntityListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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,7 +19,7 @@
 @Remote
 public interface EntityListenerTest {
 
-    public boolean triggerInjection();
+    boolean triggerInjection();
 
-    public boolean triggerPreDestroy();
+    boolean triggerPreDestroy();
 }
diff --git a/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/JPAEnvironment.java b/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/JPAEnvironment.java
index 74916a6..10426ff 100644
--- a/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/JPAEnvironment.java
+++ b/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/JPAEnvironment.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2005, 2015 SAP. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -28,26 +28,26 @@
 public interface JPAEnvironment {
 
 
-    public EntityManagerFactory createNewEntityManagerFactory(Map<String, Object> properties) throws NamingException;
+    EntityManagerFactory createNewEntityManagerFactory(Map<String, Object> properties) throws NamingException;
 
 
-    public EntityManagerFactory getEntityManagerFactory();
+    EntityManagerFactory getEntityManagerFactory();
 
-    public EntityManagerFactory createNewEntityManagerFactory() throws NamingException;
+    EntityManagerFactory createNewEntityManagerFactory() throws NamingException;
 
-    public EntityManager getEntityManager();
+    EntityManager getEntityManager();
 
-    public void beginTransaction(EntityManager em);
+    void beginTransaction(EntityManager em);
 
-    public void commitTransaction(EntityManager em);
+    void commitTransaction(EntityManager em);
 
-    public void rollbackTransaction(EntityManager em);
+    void rollbackTransaction(EntityManager em);
 
-    public void markTransactionForRollback(EntityManager em);
+    void markTransactionForRollback(EntityManager em);
 
-    public void commitTransactionAndClear(EntityManager em);
+    void commitTransactionAndClear(EntityManager em);
 
-    public void rollbackTransactionAndClear(EntityManager em);
+    void rollbackTransactionAndClear(EntityManager em);
 
     /**
      * Returns <code>true</code> if the transaction is active and not marked for rollback.
@@ -56,7 +56,7 @@
      *            The entity manager
      * @return <code>true</code> if the transaction is active and not marked for rollback
      */
-    public boolean isTransactionActive(EntityManager em);
+    boolean isTransactionActive(EntityManager em);
 
     /**
      * Returns <code>true</code> if the transaction marked for rollback but not rolled back yet.
@@ -65,15 +65,15 @@
      *            The entity manager
      * @return <code>true</code> if the transaction marked for rollback but not rolled back yet
      */
-    public boolean isTransactionMarkedForRollback(EntityManager em);
+    boolean isTransactionMarkedForRollback(EntityManager em);
 
-    public boolean usesExtendedPC();
+    boolean usesExtendedPC();
 
-    public DataSource getDataSource();
+    DataSource getDataSource();
 
-    public Object getPropertyValue(EntityManager em, String key);
+    Object getPropertyValue(EntityManager em, String key);
 
-    public void evict(EntityManager em, Class<?> clazz);
+    void evict(EntityManager em, Class<?> clazz);
 
-    public void evictAll(EntityManager em);
+    void evictAll(EntityManager em);
 }
diff --git a/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/Notification.java b/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/Notification.java
index fb8e91b..6f56f6b 100644
--- a/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/Notification.java
+++ b/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/Notification.java
@@ -27,6 +27,6 @@
     /**
      * Notify a run notifier of this notification.
      */
-    public void notify(RunNotifier notifier);
+    void notify(RunNotifier notifier);
 
 }
diff --git a/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/ServerTestRunner.java b/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/ServerTestRunner.java
index c3d38a7..48d72b5 100644
--- a/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/ServerTestRunner.java
+++ b/jpa/eclipselink.jpa.wdf.test/src/it/java/org/eclipse/persistence/testing/framework/wdf/server/ServerTestRunner.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2005, 2015 SAP. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -30,6 +30,6 @@
      * @param testProperties the test properties
      * @return a list of notifications recorded during test execution
      */
-    public List<Notification> runTestClass(String className, String dsName, Map<String, String> testProperties);
+    List<Notification> runTestClass(String className, String dsName, Map<String, String> testProperties);
 
 }
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractGrammarValidator.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractGrammarValidator.java
index 95b6d00..8bc41ed 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractGrammarValidator.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/AbstractGrammarValidator.java
@@ -4524,7 +4524,7 @@
      * @see AbstractSingleEncapsulatedExpressionHelper
      * @see AbstractTripleEncapsulatedExpressionHelper
      */
-    protected static interface AbstractEncapsulatedExpressionHelper<T extends AbstractEncapsulatedExpression> {
+    protected interface AbstractEncapsulatedExpressionHelper<T extends AbstractEncapsulatedExpression> {
 
         /**
          * Returns the arguments that can help to format the localized problem.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/JPQLQueryDeclaration.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/JPQLQueryDeclaration.java
index b2ec013..000c93b 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/JPQLQueryDeclaration.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/JPQLQueryDeclaration.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -92,7 +92,7 @@
      * This enum type defines the various types of declarations supported by both the JPA functional
      * specification and EclipseLink.
      */
-    public enum Type {
+    enum Type {
 
         /**
          * Indicates the "root" object maps a fully qualified class name.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/AbstractContentAssistVisitor.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/AbstractContentAssistVisitor.java
index 336d0ec..0c82e26 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/AbstractContentAssistVisitor.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/AbstractContentAssistVisitor.java
@@ -6223,7 +6223,7 @@
      * This helper is used to determine how to add proposals within a collection of expressions. Each
      * expression is usually separated by either a whitespace or by a comma.
      */
-    protected static interface CollectionExpressionHelper<T extends Expression> {
+    protected interface CollectionExpressionHelper<T extends Expression> {
 
         /**
          * Adds the proposals because the cursor is at the end of the child at the given position.
@@ -9563,7 +9563,7 @@
      * A collector is responsible to retrieve the possible proposals by using the mappings that can
      * complete a path expression.
      */
-    protected static interface MappingCollector {
+    protected interface MappingCollector {
 
         /**
          * Retrieves the possible proposals that can be used to complete a path expression based on
@@ -10176,7 +10176,7 @@
      * This helper helps to add JPQL identifiers for the clauses that make up a query statement and
      * also chains the clauses within the query.
      */
-    protected static interface StatementHelper<T extends Expression> {
+    protected interface StatementHelper<T extends Expression> {
 
         /**
          * Adds the JPQL identifier of the clause being scanned by this helper.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/ContentAssistProposals.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/ContentAssistProposals.java
index aa403d6..a494244 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/ContentAssistProposals.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/ContentAssistProposals.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -200,7 +200,7 @@
     /**
      * This enumeration determines the type of classes returned by {@link ContentAssistProposals#classNames()}.
      */
-    public enum ClassType {
+    enum ClassType {
 
         /**
          * Indicates the only class type allowed is an enum type.
@@ -219,7 +219,7 @@
      *
      * @version 2.5
      */
-    public interface EnumProposals {
+    interface EnumProposals {
 
         /**
          * Returns the list of enum constants that have been filtered.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/RefactoringTool.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/RefactoringTool.java
index 58dfc21..4604d7a 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/RefactoringTool.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/RefactoringTool.java
@@ -808,7 +808,7 @@
     /**
      * This interface is used to transparently push the new value into the {@link StateObject}.
      */
-    protected static interface StateObjectUpdater<T extends StateObject> {
+    protected interface StateObjectUpdater<T extends StateObject> {
 
         /**
          * Updates the given {@link StateObject} by updating its state with the given new value.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IJPQLQueryFormatter.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IJPQLQueryFormatter.java
index cd3aea5..0259a10 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IJPQLQueryFormatter.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IJPQLQueryFormatter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 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
@@ -42,7 +42,7 @@
     /**
      * This enumeration determines how the JPQL identifiers are formatted when written out.
      */
-    public enum IdentifierStyle {
+    enum IdentifierStyle {
 
         /**
          * The JPQL identifiers are written out the first letter being uppercase and the rest being
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IListChangeEvent.java b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IListChangeEvent.java
index 20e2607..0bc6b35 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IListChangeEvent.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/main/java/org/eclipse/persistence/jpa/jpql/tools/model/IListChangeEvent.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
@@ -99,7 +99,7 @@
     /**
      * This enumeration lists the possible modification a list can have.
      */
-    public enum EventType {
+    enum EventType {
 
         /**
          * Specifies the list changed by having new items inserted.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/JPQLTestRunner.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/JPQLTestRunner.java
index 68e98d3..86d1d60 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/JPQLTestRunner.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/JPQLTestRunner.java
@@ -438,7 +438,7 @@
     /**
      * This interface is used to create the description of a unit-tests.
      */
-    private static interface DescriptionBuilder {
+    private interface DescriptionBuilder {
 
         /**
          * Creates a string representation of the given object.
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLParserTest.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLParserTest.java
index e8c5e94..cf838db 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLParserTest.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLParserTest.java
@@ -2488,7 +2488,7 @@
      * of the query. This interface also adds helper method for easily creating a parsed tree
      * representation of the actual query parsed tree.
      */
-    public static interface ExpressionTester {
+    public interface ExpressionTester {
 
         AdditionExpressionTester add(ExpressionTester expression);
         AndExpressionTester and(ExpressionTester expression);
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLQueryStringFormatter.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLQueryStringFormatter.java
index 1afc848..026fc90 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLQueryStringFormatter.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/parser/JPQLQueryStringFormatter.java
@@ -30,7 +30,7 @@
      * The default implementation of {@link JPQLQueryStringFormatter}, which returns the JPQL query
      * without formatting it.
      */
-    public static JPQLQueryStringFormatter DEFAULT = new JPQLQueryStringFormatter() {
+    JPQLQueryStringFormatter DEFAULT = new JPQLQueryStringFormatter() {
 
         @Override
         public String format(String query) {
diff --git a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/model/AbstractStateObjectTest.java b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/model/AbstractStateObjectTest.java
index c9875e5..e4ed601 100644
--- a/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/model/AbstractStateObjectTest.java
+++ b/jpa/org.eclipse.persistence.jpa.jpql/src/test/java/org/eclipse/persistence/jpa/tests/jpql/tools/model/AbstractStateObjectTest.java
@@ -4963,7 +4963,7 @@
      * of the query. This interface also adds helper method for easily creating a parsed tree
      * representation of the actual query parsed tree.
      */
-    protected static interface StateObjectTester {
+    protected interface StateObjectTester {
 
         AdditionExpressionStateObjectTester add(StateObjectTester expression);
         AndExpressionStateObjectTester and(StateObjectTester expression);
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner.java
index b83678c..c12ecab 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner.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
@@ -22,5 +22,5 @@
  * @author mschinca
  */
 public interface TestRunner {
-    public Throwable runTest(String className, String test, Properties props);
+    Throwable runTest(String className, String test, Properties props);
 }
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner1.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner1.java
index 270c632..59e81c2 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner1.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner1.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
@@ -22,5 +22,5 @@
  * @author mschinca
  */
 public interface TestRunner1 {
-    public Throwable runTest(String className, String test, Properties props);
+    Throwable runTest(String className, String test, Properties props);
 }
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner2.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner2.java
index cea221f..86c35c5 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner2.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner2.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
@@ -22,5 +22,5 @@
  * @author mschinca
  */
 public interface TestRunner2 {
-    public Throwable runTest(String className, String test, Properties props);
+    Throwable runTest(String className, String test, Properties props);
 }
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner3.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner3.java
index 697f827..619a11a 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner3.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner3.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
@@ -22,5 +22,5 @@
  * @author mschinca
  */
 public interface TestRunner3 {
-    public Throwable runTest(String className, String test, Properties props);
+    Throwable runTest(String className, String test, Properties props);
 }
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner4.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner4.java
index 62f5554..6c8ab03 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner4.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner4.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
@@ -22,5 +22,5 @@
  * @author mschinca
  */
 public interface TestRunner4 {
-    public Throwable runTest(String className, String test, Properties props);
+    Throwable runTest(String className, String test, Properties props);
 }
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner5.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner5.java
index d241817..f773ead 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner5.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner5.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
@@ -22,5 +22,5 @@
  * @author mschinca
  */
 public interface TestRunner5 {
-    public Throwable runTest(String className, String test, Properties props);
+    Throwable runTest(String className, String test, Properties props);
 }
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner6.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner6.java
index 1df60e2..77841c8 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner6.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/server/TestRunner6.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 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
@@ -22,5 +22,5 @@
  * @author mschinca
  */
 public interface TestRunner6 {
-    public Throwable runTest(String className, String test, Properties props);
+    Throwable runTest(String className, String test, Properties props);
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/many/MapEntry.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/many/MapEntry.java
index 67ed5c5..94149ee 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/many/MapEntry.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/many/MapEntry.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
@@ -15,10 +15,10 @@
 package org.eclipse.persistence.internal.jaxb.many;
 
 public interface MapEntry <K, V>{
-    public K getKey();
-    public V getValue();
+    K getKey();
+    V getValue();
 
-    public void setKey(K key);
-    public void setValue(V value);
+    void setKey(K key);
+    void setValue(V value);
 }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/AttributeNode.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/AttributeNode.java
index 625a27c..c61856e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/AttributeNode.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/AttributeNode.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
@@ -23,5 +23,5 @@
     /*
      * returns the name of the referencing attribute.
      */
-    public String getAttributeName();
+    String getAttributeName();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/ObjectGraph.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/ObjectGraph.java
index b14a96b..7d8db77 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/ObjectGraph.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/ObjectGraph.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
@@ -31,7 +31,7 @@
      * Returns the name of the static EntityGraph.  Will return null if the
      * EntityGraph is not a named EntityGraph.
      */
-    public String getName();
+    String getName();
 
     /*
      * Add an AttributeNode attribute to the entity graph.
@@ -41,7 +41,7 @@
      * @throws IllegalStateException if this EntityGraph has been statically
      * defined
      */
-    public void addAttributeNodes(String ... attributeName);
+    void addAttributeNodes(String... attributeName);
 
 
     /*
@@ -57,7 +57,7 @@
      * @throws IllegalStateException if this EntityGraph has been statically
      * defined
      */
-    public Subgraph addSubgraph(String attribute);
+    Subgraph addSubgraph(String attribute);
 
     /**
      * Used to add a node of the graph that corresponds to a managed type with
@@ -72,13 +72,13 @@
      * @throws IllegalStateException
      *             if this EntityGraph has been statically defined
      */
-    public Subgraph addSubgraph(String attribute, Class type);
+    Subgraph addSubgraph(String attribute, Class type);
 
     /*
      * returns the attributes of this entity that are included in the entity
      * graph
      */
-    public List<AttributeNode> getAttributeNodes();
+    List<AttributeNode> getAttributeNodes();
 
 }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/Subgraph.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/Subgraph.java
index 28b8f7b..b04b98a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/Subgraph.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/Subgraph.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
@@ -32,7 +32,7 @@
      * @throws IllegalStateException
      *             if this EntityGraph has been statically defined
      */
-    public void  addAttributeNodes(String ... attributeName);
+    void  addAttributeNodes(String... attributeName);
 
     /**
      * Used to add a node of the graph that corresponds to a managed type. This
@@ -46,7 +46,7 @@
      * @throws IllegalStateException
      *             if this EntityGraph has been statically defined
      */
-    public Subgraph addSubgraph(String attribute);
+    Subgraph addSubgraph(String attribute);
 
     /**
      * Used to add a node of the graph that corresponds to a managed type with
@@ -61,7 +61,7 @@
      * @throws IllegalStateException
      *             if this EntityGraph has been statically defined
      */
-    public Subgraph addSubgraph(String attribute, Class type);
+    Subgraph addSubgraph(String attribute, Class type);
 
 
 
@@ -69,11 +69,11 @@
      * returns the attributes of this managed type that are included in the
      * sub-graph
      */
-    public List<AttributeNode> getAttributeNodes();
+    List<AttributeNode> getAttributeNodes();
 
     /**
      * returns the type of this sub-graph if it was used to extend a superclass
      * sub-graph definition.
      */
-    public Class getClassType();
+    Class getClassType();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaAnnotation.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaAnnotation.java
index c20629a8..08313b4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaAnnotation.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaAnnotation.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
@@ -31,8 +31,8 @@
  */
 public interface JavaAnnotation {
 
-    public Map getComponents();
+    Map getComponents();
 
-    public String getName();
+    String getName();
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaClass.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaClass.java
index e091365..85969ba 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaClass.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaClass.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
@@ -31,42 +31,42 @@
  * @see java.lang.Class
  */
 public interface JavaClass extends JavaHasAnnotations {
-    public Collection getActualTypeArguments();
-    public JavaClass getComponentType();
-    public String getQualifiedName();
-    public String getRawName();
-    public boolean hasActualTypeArguments();
-    public Collection getDeclaredClasses();
-    public JavaField getDeclaredField(String arg0);
-    public Collection getDeclaredFields();
-    public JavaMethod getDeclaredMethod(String arg0, JavaClass[] arg1);
-    public Collection getDeclaredMethods();
-    public JavaMethod getMethod(String arg0, JavaClass[] arg1);
-    public Collection getMethods();
-    public JavaConstructor getConstructor(JavaClass[] parameterTypes);
-    public Collection getConstructors();
-    public JavaConstructor getDeclaredConstructor(JavaClass[] parameterTypes);
-    public Collection getDeclaredConstructors();
-    public int getModifiers();
-    public String getName();
-    public JavaPackage getPackage();
-    public String getPackageName();
-    public JavaClass getSuperclass();
-    public Type[] getGenericInterfaces();
-    public Type getGenericSuperclass();
-    public boolean isAbstract();
-    public boolean isAnnotation();
-    public boolean isArray();
-    public boolean isAssignableFrom(JavaClass arg0);
-    public boolean isEnum();
-    public boolean isFinal();
-    public boolean isInterface();
-    public boolean isMemberClass();
-    public boolean isPrimitive();
-    public boolean isPrivate();
-    public boolean isProtected();
-    public boolean isPublic();
-    public boolean isStatic();
-    public boolean isSynthetic();
-    public JavaClassInstanceOf instanceOf();
+    Collection getActualTypeArguments();
+    JavaClass getComponentType();
+    String getQualifiedName();
+    String getRawName();
+    boolean hasActualTypeArguments();
+    Collection getDeclaredClasses();
+    JavaField getDeclaredField(String arg0);
+    Collection getDeclaredFields();
+    JavaMethod getDeclaredMethod(String arg0, JavaClass[] arg1);
+    Collection getDeclaredMethods();
+    JavaMethod getMethod(String arg0, JavaClass[] arg1);
+    Collection getMethods();
+    JavaConstructor getConstructor(JavaClass[] parameterTypes);
+    Collection getConstructors();
+    JavaConstructor getDeclaredConstructor(JavaClass[] parameterTypes);
+    Collection getDeclaredConstructors();
+    int getModifiers();
+    String getName();
+    JavaPackage getPackage();
+    String getPackageName();
+    JavaClass getSuperclass();
+    Type[] getGenericInterfaces();
+    Type getGenericSuperclass();
+    boolean isAbstract();
+    boolean isAnnotation();
+    boolean isArray();
+    boolean isAssignableFrom(JavaClass arg0);
+    boolean isEnum();
+    boolean isFinal();
+    boolean isInterface();
+    boolean isMemberClass();
+    boolean isPrimitive();
+    boolean isPrivate();
+    boolean isProtected();
+    boolean isPublic();
+    boolean isStatic();
+    boolean isSynthetic();
+    JavaClassInstanceOf instanceOf();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaConstructor.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaConstructor.java
index 6a351a9..34c3692 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaConstructor.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaConstructor.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
@@ -24,15 +24,15 @@
  *
  */
 public interface JavaConstructor {
-    public int getModifiers();
-    public String getName();
-    public JavaClass getOwningClass();
-    public JavaClass[] getParameterTypes();
-    public boolean isAbstract();
-    public boolean isFinal();
-    public boolean isPrivate();
-    public boolean isProtected();
-    public boolean isPublic();
-    public boolean isStatic();
-    public boolean isSynthetic();
+    int getModifiers();
+    String getName();
+    JavaClass getOwningClass();
+    JavaClass[] getParameterTypes();
+    boolean isAbstract();
+    boolean isFinal();
+    boolean isPrivate();
+    boolean isProtected();
+    boolean isPublic();
+    boolean isStatic();
+    boolean isSynthetic();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaField.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaField.java
index 8bfc46b..d236824 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaField.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaField.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
@@ -28,15 +28,15 @@
  * @see java.lang.reflect.Field
  */
 public interface JavaField extends JavaHasAnnotations {
-    public int getModifiers();
-    public String getName();
-    public JavaClass getResolvedType();
-    public boolean isAbstract();
-    public boolean isEnumConstant();
-    public boolean isFinal();
-    public boolean isPrivate();
-    public boolean isProtected();
-    public boolean isPublic();
-    public boolean isStatic();
-    public boolean isSynthetic();
+    int getModifiers();
+    String getName();
+    JavaClass getResolvedType();
+    boolean isAbstract();
+    boolean isEnumConstant();
+    boolean isFinal();
+    boolean isPrivate();
+    boolean isProtected();
+    boolean isPublic();
+    boolean isStatic();
+    boolean isSynthetic();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaHasAnnotations.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaHasAnnotations.java
index 7980024..8a1ee6d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaHasAnnotations.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaHasAnnotations.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
@@ -31,8 +31,8 @@
  * @see org.eclipse.persistence.jaxb.javamodel.JavaAnnotation
  */
 public interface JavaHasAnnotations {
-    public JavaAnnotation getAnnotation(JavaClass arg0);
-    public Collection getAnnotations();
-    public JavaAnnotation getDeclaredAnnotation(JavaClass arg0);
-    public Collection getDeclaredAnnotations();
+    JavaAnnotation getAnnotation(JavaClass arg0);
+    Collection getAnnotations();
+    JavaAnnotation getDeclaredAnnotation(JavaClass arg0);
+    Collection getDeclaredAnnotations();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaMethod.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaMethod.java
index 9e30dc6..bed3cbc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaMethod.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaMethod.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
@@ -28,17 +28,17 @@
  * @see java.lang.reflect.Method
  */
 public interface JavaMethod extends JavaHasAnnotations {
-    public int getModifiers();
-    public String getName();
-    public JavaClass getOwningClass();
-    public JavaClass[] getParameterTypes();
-    public JavaClass getReturnType();
-    public boolean isAbstract();
-    public boolean isFinal();
-    public boolean isPrivate();
-    public boolean isProtected();
-    public boolean isPublic();
-    public boolean isStatic();
-    public boolean isSynthetic();
+    int getModifiers();
+    String getName();
+    JavaClass getOwningClass();
+    JavaClass[] getParameterTypes();
+    JavaClass getReturnType();
+    boolean isAbstract();
+    boolean isFinal();
+    boolean isPrivate();
+    boolean isProtected();
+    boolean isPublic();
+    boolean isStatic();
+    boolean isSynthetic();
     boolean isBridge();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModel.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModel.java
index 88a7c1b..047a2eb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModel.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModel.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
@@ -29,8 +29,8 @@
  * @since Oracle TopLink 11.1.1.0.0
  */
 public interface JavaModel {
-    public JavaClass getClass(Class<?> jClass);
-    public JavaClass getClass(String classname);
-    public ClassLoader getClassLoader();
-    public java.lang.annotation.Annotation getAnnotation(JavaAnnotation janno, Class<?> jClass);
+    JavaClass getClass(Class<?> jClass);
+    JavaClass getClass(String classname);
+    ClassLoader getClassLoader();
+    java.lang.annotation.Annotation getAnnotation(JavaAnnotation janno, Class<?> jClass);
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModelInput.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModelInput.java
index c599ae5..de7b4c6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModelInput.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaModelInput.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
@@ -30,6 +30,6 @@
  * @see org.eclipse.persistence.jaxb.javamodel.JavaModel
  */
 public interface JavaModelInput {
-    public JavaClass[] getJavaClasses();
-    public JavaModel getJavaModel();
+    JavaClass[] getJavaClasses();
+    JavaModel getJavaModel();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaPackage.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaPackage.java
index 7b6ef31..ce8dec3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaPackage.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/jaxb/javamodel/JavaPackage.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
@@ -26,6 +26,6 @@
  * @see org.eclipse.persistence.jaxb.javamodel.JavaHasAnnotations
  * @see java.lang.Package
  */
-public abstract interface JavaPackage extends JavaHasAnnotations {
-    public String getQualifiedName();
+public interface JavaPackage extends JavaHasAnnotations {
+    String getQualifiedName();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/Linkable.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/Linkable.java
index c2b27ff..0c44f19 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/Linkable.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/Linkable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -16,7 +16,7 @@
 
 public interface Linkable {
 
-    public String getLink();
-    public void setLink(String link);
+    String getLink();
+    void setLink(String link);
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java
index a2bfcb9..93785d7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java
@@ -472,7 +472,7 @@
     public abstract class Ancestors{}
     @Target({ ElementType.FIELD})
     @Retention(RetentionPolicy.RUNTIME)
-    public static @interface CustomAnnotation {
+    public @interface CustomAnnotation {
         String value();
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/Foo.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/Foo.java
index 3086074..e8a220b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/Foo.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/Foo.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
@@ -15,6 +15,6 @@
 import java.util.List;
 
 public interface Foo {
-    public List<Object> getOthers();
-    public void setOthers(List<Object> others);
+    List<Object> getOthers();
+    void setOthers(List<Object> others);
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerBaseInt.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerBaseInt.java
index 321c993..15eb6ac 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerBaseInt.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerBaseInt.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
@@ -18,8 +18,8 @@
 
 public interface CustomerBaseInt {
     @XmlElement
-    public String getFirstName();
+    String getFirstName();
 
-    public void setFirstName(String name);
+    void setFirstName(String name);
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerInt.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerInt.java
index 3727a7b..410909b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerInt.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/CustomerInt.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
@@ -20,8 +20,8 @@
 @XmlRootElement(name="customer")
 public interface CustomerInt extends CustomerBaseInt {
     @XmlElement
-    public String getLastName();
+    String getLastName();
 
-    public void setLastName(String lName);
+    void setLastName(String lName);
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/Address.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/Address.java
index be5ba68..08c48cf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/Address.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/Address.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
@@ -16,10 +16,10 @@
 
 public interface Address {
 
-    public String getStreet();
-    public void setStreet(String street);
+    String getStreet();
+    void setStreet(String street);
 
-    public String getCity();
-    public void setCity(String city);
+    String getCity();
+    void setCity(String city);
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/rs/IsWriteableTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/rs/IsWriteableTestCases.java
index fc4cc07..00d04ab 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/rs/IsWriteableTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/rs/IsWriteableTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -116,7 +116,7 @@
 
     }
 
-    private static interface MyStreamingOutput extends StreamingOutput {
+    private interface MyStreamingOutput extends StreamingOutput {
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/Linkable.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/Linkable.java
index 00b57ca..cda4529 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/Linkable.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/Linkable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -16,6 +16,6 @@
 
 public interface Linkable {
 
-    public String getHref();
+    String getHref();
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/AddressOwner.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/AddressOwner.java
index 15e03c7..ea9d484 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/AddressOwner.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/AddressOwner.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
@@ -14,5 +14,5 @@
 
 public interface AddressOwner {
 
-    public Address getAddr();
+    Address getAddr();
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/self/plsqlcallmodel/DatabaseType.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/self/plsqlcallmodel/DatabaseType.java
index 4cfba79..fd24bbd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/self/plsqlcallmodel/DatabaseType.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/self/plsqlcallmodel/DatabaseType.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
@@ -16,8 +16,8 @@
 
 public interface DatabaseType {
 
-    public boolean isComplexDatabaseType();
+    boolean isComplexDatabaseType();
 
-    public boolean isJDBCType();
+    boolean isJDBCType();
 
 }
diff --git a/sdo/eclipselink.sdo.test.server/src/it/java/org/eclipse/persistence/testing/sdo/server/Dept.java b/sdo/eclipselink.sdo.test.server/src/it/java/org/eclipse/persistence/testing/sdo/server/Dept.java
index b7e4562..f7879c5 100644
--- a/sdo/eclipselink.sdo.test.server/src/it/java/org/eclipse/persistence/testing/sdo/server/Dept.java
+++ b/sdo/eclipselink.sdo.test.server/src/it/java/org/eclipse/persistence/testing/sdo/server/Dept.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
@@ -16,16 +16,16 @@
 
 public interface Dept {
 
-    public java.lang.Integer getDeptno();
+    java.lang.Integer getDeptno();
 
-    public void setDeptno(java.lang.Integer value);
+    void setDeptno(java.lang.Integer value);
 
-    public java.lang.String getDname();
+    java.lang.String getDname();
 
-    public void setDname(java.lang.String value);
+    void setDname(java.lang.String value);
 
-    public java.lang.String getLoc();
+    java.lang.String getLoc();
 
-    public void setLoc(java.lang.String value);
+    void setLoc(java.lang.String value);
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/ValueStore.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/ValueStore.java
index 238a152..2f8237a 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/ValueStore.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/ValueStore.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
@@ -57,23 +57,23 @@
      02/01/07 - add copy() function as part of SDOChangeSummary.undoChanges()
      */
 
-    public Object getDeclaredProperty(int propertyIndex);
+    Object getDeclaredProperty(int propertyIndex);
 
-    public Object getOpenContentProperty(Property property);
+    Object getOpenContentProperty(Property property);
 
-    public void setDeclaredProperty(int propertyIndex, Object value);
+    void setDeclaredProperty(int propertyIndex, Object value);
 
-    public void setOpenContentProperty(Property property, Object value);
+    void setOpenContentProperty(Property property, Object value);
 
-    public void setManyProperty(Property propertyName, Object value);
+    void setManyProperty(Property propertyName, Object value);
 
-    public boolean isSetDeclaredProperty(int propertyIndex);
+    boolean isSetDeclaredProperty(int propertyIndex);
 
-    public boolean isSetOpenContentProperty(Property property);
+    boolean isSetOpenContentProperty(Property property);
 
-    public void unsetDeclaredProperty(int propertyIndex);
+    void unsetDeclaredProperty(int propertyIndex);
 
-    public void unsetOpenContentProperty(Property property);
+    void unsetOpenContentProperty(Property property);
 
     /**
      * Perform any post-instantiation integrity operations that could not be done during
@@ -84,12 +84,12 @@
      *
      * @param dataObject
      */
-    public void initialize(DataObject dataObject);
+    void initialize(DataObject dataObject);
 
     /**
      * Get a shallow copy of the original ValueStore.
      * Changes made to the copy must not impact the original ValueStore
      * @return ValueStore
      */
-    public ValueStore copy();
+    ValueStore copy();
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/CodeWriter.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/CodeWriter.java
index 44a8605..4533b1f 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/CodeWriter.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/CodeWriter.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
@@ -30,7 +30,7 @@
      * @param filename The name of the generated source file including the .java extension
      * @param content StringBuffer containing the contents of the generated interface.
      */
-    public void writeInterface(String dir, String filename, StringBuffer content);
+    void writeInterface(String dir, String filename, StringBuffer content);
 
     /**
       * <p>Called from org.eclipse.persistence.sdo.helper.SDOClassGenerator for each generated interface if a
@@ -40,5 +40,5 @@
       * @param filename The name of the generated source file including the .java extension
       * @param content StringBuffer containing the contents of the generated implementation class.
       */
-    public void writeImpl(String dir, String filename, StringBuffer content);
+    void writeImpl(String dir, String filename, StringBuffer content);
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOClassGeneratorListener.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOClassGeneratorListener.java
index 1d86499..57748f4 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOClassGeneratorListener.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOClassGeneratorListener.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
@@ -24,41 +24,41 @@
     * This event will be triggered before the package declaration on the interface
     * @param buffer The current StringBuffer that can have content appended to it
     */
-    public void preInterfacePackage(StringBuffer buffer);
+    void preInterfacePackage(StringBuffer buffer);
 
     /**
      * This event will be triggered before the package declaration on the implementation class
      * @param buffer The current StringBuffer that can have content appended to it
      */
-    public void preImplPackage(StringBuffer buffer);
+    void preImplPackage(StringBuffer buffer);
 
     /**
      * This event will be triggered before the import declarations on the interface
      * @param buffer The current StringBuffer that can have content appended to it
      */
-    public void preInterfaceImports(StringBuffer buffer);
+    void preInterfaceImports(StringBuffer buffer);
 
     /**
      * This event will be triggered before the import declarations on the implementation class
      * @param buffer The current StringBuffer that can have content appended to it
      */
-    public void preImplImports(StringBuffer buffer);
+    void preImplImports(StringBuffer buffer);
 
     /**
      * This event will be triggered before the interface declaration on the interface
      * @param buffer The current StringBuffer that can have content appended to it
      */
-    public void preInterfaceClass(StringBuffer buffer);
+    void preInterfaceClass(StringBuffer buffer);
 
     /**
      * This event will be triggered before the class declaration on the implementation class
      * @param buffer The current StringBuffer that can have content appended to it
      */
-    public void preImplClass(StringBuffer buffer);
+    void preImplClass(StringBuffer buffer);
 
     /**
      * This event will be triggered before the attribute declarations on the implementation class
      * @param buffer The current StringBuffer that can have content appended to it
      */
-    public void preImplAttributes(StringBuffer buffer);
+    void preImplAttributes(StringBuffer buffer);
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDODataFactory.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDODataFactory.java
index 672919c..709d7f5 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDODataFactory.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDODataFactory.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
@@ -27,7 +27,7 @@
      * Return the helperContext that this instance is associated with.
      * @return
      */
-    public HelperContext getHelperContext();
+    HelperContext getHelperContext();
 
     /**
      * INTERNAL:
@@ -35,5 +35,5 @@
      *
      * @param helperContext
      */
-    public void setHelperContext(HelperContext helperContext);
+    void setHelperContext(HelperContext helperContext);
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypeHelper.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypeHelper.java
index eee9a15..b34eb36 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypeHelper.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypeHelper.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
@@ -41,23 +41,23 @@
      * @param sdoType
      * @return
      */
-    public Class getJavaWrapperTypeForSDOType(Type sdoType);
+    Class getJavaWrapperTypeForSDOType(Type sdoType);
 
-    public SDOType getTypeForImplClass(Class implClass);
+    SDOType getTypeForImplClass(Class implClass);
 
     /**
      * INTERNAL:
      * @param implClass
      * @return
      */
-    public Type getTypeForSimpleJavaType(Class implClass);
+    Type getTypeForSimpleJavaType(Class implClass);
 
     /**
      * INTERNAL:
      *
      * @param newType
      */
-    public void addType(SDOType newType);
+    void addType(SDOType newType);
 
     /**
      * INTERNAL:
@@ -65,7 +65,7 @@
      * @param aType
      * @return
      */
-    public QName getXSDTypeFromSDOType(Type aType);
+    QName getXSDTypeFromSDOType(Type aType);
 
     /**
      * INTERNAL:
@@ -73,48 +73,48 @@
      * @param aName
      * @return
      */
-    public SDOType getSDOTypeFromXSDType(QName aName);
+    SDOType getSDOTypeFromXSDType(QName aName);
 
     /**
      * INTERNAL:
      *
      * @param typesHashMap
      */
-    public void setTypesHashMap(Map typesHashMap);
+    void setTypesHashMap(Map typesHashMap);
 
     /**
      * INTERNAL:
      *
      * @return
      */
-    public Map getTypesHashMap();
+    Map getTypesHashMap();
 
     /**
      * INTERNAL:
      * Return the map of Wrapper objects (SDOWrapperTypes that wrap a primitive document).
      * @return a HashMap of SDOWrapperTypes, keyed on the XSD type that it wraps.
      */
-    public Map getWrappersHashMap();
+    Map getWrappersHashMap();
 
     /**
      * INTERNAL:
      * Set the map of Wrapper objects (SDOWrapperTypes that wrap a primitive document).
      * @param   aMap        a HashMap of SDOWrapperTypes, keyed on the XSD type that it wraps.
      */
-    public void setWrappersHashMap(Map aMap);
+    void setWrappersHashMap(Map aMap);
 
     /**
      * INTERNAL:
      *
      */
-    public void reset();
+    void reset();
 
     /**
      * INTERNAL:
      * Return the helperContext that this instance is associated with.
      * @return
      */
-    public HelperContext getHelperContext();
+    HelperContext getHelperContext();
 
     /**
      * INTERNAL:
@@ -122,38 +122,38 @@
      *
      * @param helperContext
      */
-    public void setHelperContext(HelperContext helperContext);
+    void setHelperContext(HelperContext helperContext);
 
     /**
      * INTERNAL:
      * Add the given namespace uri and prefix to the global namespace resolver.
      */
-    public String addNamespace(String prefix, String uri);
+    String addNamespace(String prefix, String uri);
 
     /**
       * INTERNAL:
       * Return the prefix for the given uri, or generate a new one if necessary
       */
-    public String getPrefix(String uri);
+    String getPrefix(String uri);
 
     /**
     * INTERNAL:
     * Return the NamespaceResolver
     */
-    public NamespaceResolver getNamespaceResolver();
+    NamespaceResolver getNamespaceResolver();
 
     /**
     * INTERNAL:
     * Return the Map of Open Content Properties
     */
-    public Map getOpenContentProperties();
+    Map getOpenContentProperties();
 
-    public void addWrappersToProject(Project toplinkProject);
+    void addWrappersToProject(Project toplinkProject);
 
-    public Map getInterfacesToSDOTypeHashMap();
+    Map getInterfacesToSDOTypeHashMap();
 
-    public Map<Class, SDOType> getImplClassesToSDOType();
+    Map<Class, SDOType> getImplClassesToSDOType();
 
-    public List getAnonymousTypes();
+    List getAnonymousTypes();
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXMLHelper.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXMLHelper.java
index 0f5c1f8..3a860a5 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXMLHelper.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXMLHelper.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
@@ -39,20 +39,20 @@
  */
 public interface SDOXMLHelper extends XMLHelper {
 
-    public void serialize(XMLDocument xmlDocument, OutputStream outputStream, Object options) throws IOException;
+    void serialize(XMLDocument xmlDocument, OutputStream outputStream, Object options) throws IOException;
 
     /**
      * The specified TimeZone will be used for all String to date object
      * conversions.  By default the TimeZone from the JVM is used.
      */
-    public void setTimeZone(TimeZone timeZone);
+    void setTimeZone(TimeZone timeZone);
 
     /**
      * By setting this flag to true the marshalled date objects marshalled to
      * the XML schema types time and dateTime will be qualified by a time zone.
      * By default time information is not time zone qualified.
      */
-    public void setTimeZoneQualified(boolean timeZoneQualified);
+    void setTimeZoneQualified(boolean timeZoneQualified);
 
     /**
      * INTERNAL:
@@ -63,84 +63,84 @@
      * @return
      * @throws IOException
      */
-    public XMLDocument load(InputSource inputSource, String locationURI, Object options) throws IOException;
+    XMLDocument load(InputSource inputSource, String locationURI, Object options) throws IOException;
 
     /**
      * INTERNAL:
      *
      * @param loader
      */
-    public void setLoader(SDOClassLoader loader);
+    void setLoader(SDOClassLoader loader);
 
     /**
      * INTERNAL:
      *
      * @return
      */
-    public SDOClassLoader getLoader();
+    SDOClassLoader getLoader();
 
     /**
      * INTERNAL:
      *
      * @param xmlContext
      */
-    public void setXmlContext(XMLContext xmlContext);
+    void setXmlContext(XMLContext xmlContext);
 
     /**
      * INTERNAL:
      *
      * @return
      */
-    public XMLContext getXmlContext();
+    XMLContext getXmlContext();
 
     /**
      * INTERNAL:
      *
      * @param descriptors
      */
-    public void addDescriptors(List descriptors);
+    void addDescriptors(List descriptors);
 
     /**
      * INTERNAL:
      *
      * @param toplinkProject
      */
-    public void setTopLinkProject(Project toplinkProject);
+    void setTopLinkProject(Project toplinkProject);
 
     /**
      * INTERNAL:
      *
      * @return
      */
-    public Project getTopLinkProject();
+    Project getTopLinkProject();
 
     /**
      * INTERNAL:
      *
      * @param xmlMarshaller
      */
-    public void setXmlMarshaller(XMLMarshaller xmlMarshaller);
+    void setXmlMarshaller(XMLMarshaller xmlMarshaller);
 
     /**
      * INTERNAL:
      *
      * @return
      */
-    public XMLMarshaller getXmlMarshaller();
+    XMLMarshaller getXmlMarshaller();
 
     /**
      * INTERNAL:
      *
      * @param xmlUnmarshaller
      */
-    public void setXmlUnmarshaller(XMLUnmarshaller xmlUnmarshaller);
+    void setXmlUnmarshaller(XMLUnmarshaller xmlUnmarshaller);
 
     /**
      * INTERNAL:
      *
      * @return
      */
-    public XMLUnmarshaller getXmlUnmarshaller();
+    XMLUnmarshaller getXmlUnmarshaller();
 
     /**
      * INTERNAL:
@@ -148,7 +148,7 @@
      *
      * @return
      */
-    public HelperContext getHelperContext();
+    HelperContext getHelperContext();
 
     /**
      * INTERNAL:
@@ -156,19 +156,19 @@
      *
      * @param helperContext
      */
-    public void setHelperContext(HelperContext helperContext);
+    void setHelperContext(HelperContext helperContext);
 
     /**
      * INTERNAL:
      *
      */
-    public void reset();
+    void reset();
 
-    public void initializeDescriptor(XMLDescriptor descriptor);
+    void initializeDescriptor(XMLDescriptor descriptor);
 
     /**
      * INTERNAL:
      *
      */
-    public XMLConversionManager getXmlConversionManager();
+    XMLConversionManager getXmlConversionManager();
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXSDHelper.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXSDHelper.java
index 6300e56..c8119b7 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXSDHelper.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOXSDHelper.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
@@ -39,7 +39,7 @@
      * @param isElement
      * @return
      */
-    public Property getGlobalProperty(QName qname, boolean isElement);
+    Property getGlobalProperty(QName qname, boolean isElement);
 
     /**
      * INTERNAL:
@@ -48,7 +48,7 @@
      * @param schemaResolver
      * @return
      */
-    public List define(Source xsdSource, SchemaResolver schemaResolver);
+    List define(Source xsdSource, SchemaResolver schemaResolver);
 
     /**
      * INTERNAL:
@@ -57,7 +57,7 @@
      * @param schemaLocationResolver
      * @return
      */
-    public String generate(List types, SchemaLocationResolver schemaLocationResolver);
+    String generate(List types, SchemaLocationResolver schemaLocationResolver);
 
     /**
      * INTERNAL:
@@ -65,7 +65,7 @@
      * @param appInfoElements
      * @return
      */
-    public Map buildAppInfoMap(List appInfoElements);
+    Map buildAppInfoMap(List appInfoElements);
 
     /**
      * INTERNAL:
@@ -73,7 +73,7 @@
      *
      * @return
      */
-    public HelperContext getHelperContext();
+    HelperContext getHelperContext();
 
     /**
      * INTERNAL:
@@ -81,13 +81,13 @@
      *
      * @param helperContext
      */
-    public void setHelperContext(HelperContext helperContext);
+    void setHelperContext(HelperContext helperContext);
 
     /**
      * INTERNAL:
      *
      */
-    public void reset();
+    void reset();
 
     /**
      * INTERNAL:
@@ -97,5 +97,5 @@
      * @param isElement
      * Register the given property with the given qname.
      */
-    public void addGlobalProperty(QName qname, Property prop, boolean isElement);
+    void addGlobalProperty(QName qname, Property prop, boolean isElement);
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaLocationResolver.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaLocationResolver.java
index 93ba3f5..8eff7e1 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaLocationResolver.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaLocationResolver.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
@@ -32,5 +32,5 @@
      * @param targetType the target type
      * @return the value for the schemaLocation attribute of the generated Import
      */
-    public String resolveSchemaLocation(Type sourceType, Type targetType);
+    String resolveSchemaLocation(Type sourceType, Type targetType);
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaResolver.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaResolver.java
index 806a7e6..daabf0b 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaResolver.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SchemaResolver.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
@@ -38,5 +38,5 @@
      * @return Source for the referenced Schema or null if processing the referenced schema should be skipped.  If this method
      * throws an exception, processing will stop.
      */
-    public Source resolveSchema(Source sourceXSD, String namespace, String schemaLocation);
+    Source resolveSchema(Source sourceXSD, String namespace, String schemaLocation);
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/ChangeSummaryA.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/ChangeSummaryA.java
index b3ec062..751dc74 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/ChangeSummaryA.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/ChangeSummaryA.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
@@ -16,11 +16,11 @@
 
 public interface ChangeSummaryA {
 
-   public java.lang.String getProperty1();
+   java.lang.String getProperty1();
 
-   public void setProperty1(java.lang.String value);
+   void setProperty1(java.lang.String value);
 
-   public commonj.sdo.ChangeSummary getChanges();
+   commonj.sdo.ChangeSummary getChanges();
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypeMany.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypeMany.java
index 26d421a..7c2d504 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypeMany.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypeMany.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
@@ -16,9 +16,9 @@
 
 public interface DataTypeMany {
 
-   public java.util.List getProperty1();
+   java.util.List getProperty1();
 
-   public void setProperty1(java.util.List value);
+   void setProperty1(java.util.List value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypes.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypes.java
index bf04e79..2210f0d 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypes.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypes.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
@@ -16,185 +16,185 @@
 
 public interface DataTypes {
 
-   public java.lang.Object getAnySimpleTypeProperty();
+   java.lang.Object getAnySimpleTypeProperty();
 
-   public void setAnySimpleTypeProperty(java.lang.Object value);
+   void setAnySimpleTypeProperty(java.lang.Object value);
 
-   public commonj.sdo.DataObject getAnyTypeProperty();
+   commonj.sdo.DataObject getAnyTypeProperty();
 
-   public void setAnyTypeProperty(commonj.sdo.DataObject value);
+   void setAnyTypeProperty(commonj.sdo.DataObject value);
 
-   public java.lang.String getAnyURIProperty();
+   java.lang.String getAnyURIProperty();
 
-   public void setAnyURIProperty(java.lang.String value);
+   void setAnyURIProperty(java.lang.String value);
 
-   public byte[] getBase64BinaryProperty();
+   byte[] getBase64BinaryProperty();
 
-   public void setBase64BinaryProperty(byte[] value);
+   void setBase64BinaryProperty(byte[] value);
 
-   public boolean isBooleanProperty();
+   boolean isBooleanProperty();
 
-   public void setBooleanProperty(boolean value);
+   void setBooleanProperty(boolean value);
 
-   public byte getByteProperty();
+   byte getByteProperty();
 
-   public void setByteProperty(byte value);
+   void setByteProperty(byte value);
 
-   public java.lang.String getDateProperty();
+   java.lang.String getDateProperty();
 
-   public void setDateProperty(java.lang.String value);
+   void setDateProperty(java.lang.String value);
 
-   public java.lang.String getDateTimeProperty();
+   java.lang.String getDateTimeProperty();
 
-   public void setDateTimeProperty(java.lang.String value);
+   void setDateTimeProperty(java.lang.String value);
 
-   public java.math.BigDecimal getDecimalProperty();
+   java.math.BigDecimal getDecimalProperty();
 
-   public void setDecimalProperty(java.math.BigDecimal value);
+   void setDecimalProperty(java.math.BigDecimal value);
 
-   public double getDoubleProperty();
+   double getDoubleProperty();
 
-   public void setDoubleProperty(double value);
+   void setDoubleProperty(double value);
 
-   public java.lang.String getDurationProperty();
+   java.lang.String getDurationProperty();
 
-   public void setDurationProperty(java.lang.String value);
+   void setDurationProperty(java.lang.String value);
 
-   public java.util.List getENTITIESProperty();
+   java.util.List getENTITIESProperty();
 
-   public void setENTITIESProperty(java.util.List value);
+   void setENTITIESProperty(java.util.List value);
 
-   public java.lang.String getENTITYProperty();
+   java.lang.String getENTITYProperty();
 
-   public void setENTITYProperty(java.lang.String value);
+   void setENTITYProperty(java.lang.String value);
 
-   public float getFloatProperty();
+   float getFloatProperty();
 
-   public void setFloatProperty(float value);
+   void setFloatProperty(float value);
 
-   public java.lang.String getGDayProperty();
+   java.lang.String getGDayProperty();
 
-   public void setGDayProperty(java.lang.String value);
+   void setGDayProperty(java.lang.String value);
 
-   public java.lang.String getGMonthProperty();
+   java.lang.String getGMonthProperty();
 
-   public void setGMonthProperty(java.lang.String value);
+   void setGMonthProperty(java.lang.String value);
 
-   public java.lang.String getGMonthDayProperty();
+   java.lang.String getGMonthDayProperty();
 
-   public void setGMonthDayProperty(java.lang.String value);
+   void setGMonthDayProperty(java.lang.String value);
 
-   public java.lang.String getGYearProperty();
+   java.lang.String getGYearProperty();
 
-   public void setGYearProperty(java.lang.String value);
+   void setGYearProperty(java.lang.String value);
 
-   public java.lang.String getGYearMonthProperty();
+   java.lang.String getGYearMonthProperty();
 
-   public void setGYearMonthProperty(java.lang.String value);
+   void setGYearMonthProperty(java.lang.String value);
 
-   public byte[] getHexBinaryProperty();
+   byte[] getHexBinaryProperty();
 
-   public void setHexBinaryProperty(byte[] value);
+   void setHexBinaryProperty(byte[] value);
 
-   public java.lang.String getIDProperty();
+   java.lang.String getIDProperty();
 
-   public void setIDProperty(java.lang.String value);
+   void setIDProperty(java.lang.String value);
 
-   public java.lang.String getIDREFProperty();
+   java.lang.String getIDREFProperty();
 
-   public void setIDREFProperty(java.lang.String value);
+   void setIDREFProperty(java.lang.String value);
 
-   public int getIntProperty();
+   int getIntProperty();
 
-   public void setIntProperty(int value);
+   void setIntProperty(int value);
 
-   public java.math.BigInteger getIntegerProperty();
+   java.math.BigInteger getIntegerProperty();
 
-   public void setIntegerProperty(java.math.BigInteger value);
+   void setIntegerProperty(java.math.BigInteger value);
 
-   public java.lang.String getLanguageProperty();
+   java.lang.String getLanguageProperty();
 
-   public void setLanguageProperty(java.lang.String value);
+   void setLanguageProperty(java.lang.String value);
 
-   public long getLongProperty();
+   long getLongProperty();
 
-   public void setLongProperty(long value);
+   void setLongProperty(long value);
 
-   public java.lang.String getNameProperty();
+   java.lang.String getNameProperty();
 
-   public void setNameProperty(java.lang.String value);
+   void setNameProperty(java.lang.String value);
 
-   public java.lang.String getNCNameProperty();
+   java.lang.String getNCNameProperty();
 
-   public void setNCNameProperty(java.lang.String value);
+   void setNCNameProperty(java.lang.String value);
 
-   public java.math.BigInteger getNegativeIntegerProperty();
+   java.math.BigInteger getNegativeIntegerProperty();
 
-   public void setNegativeIntegerProperty(java.math.BigInteger value);
+   void setNegativeIntegerProperty(java.math.BigInteger value);
 
-   public java.lang.String getNMTOKENProperty();
+   java.lang.String getNMTOKENProperty();
 
-   public void setNMTOKENProperty(java.lang.String value);
+   void setNMTOKENProperty(java.lang.String value);
 
-   public java.util.List getNMTOKENSProperty();
+   java.util.List getNMTOKENSProperty();
 
-   public void setNMTOKENSProperty(java.util.List value);
+   void setNMTOKENSProperty(java.util.List value);
 
-   public java.math.BigInteger getNonNegativeIntegerProperty();
+   java.math.BigInteger getNonNegativeIntegerProperty();
 
-   public void setNonNegativeIntegerProperty(java.math.BigInteger value);
+   void setNonNegativeIntegerProperty(java.math.BigInteger value);
 
-   public java.math.BigInteger getNonPositiveIntegerProperty();
+   java.math.BigInteger getNonPositiveIntegerProperty();
 
-   public void setNonPositiveIntegerProperty(java.math.BigInteger value);
+   void setNonPositiveIntegerProperty(java.math.BigInteger value);
 
-   public java.lang.String getNormalizedStringProperty();
+   java.lang.String getNormalizedStringProperty();
 
-   public void setNormalizedStringProperty(java.lang.String value);
+   void setNormalizedStringProperty(java.lang.String value);
 
-   public java.lang.String getNOTATION();
+   java.lang.String getNOTATION();
 
-   public void setNOTATION(java.lang.String value);
+   void setNOTATION(java.lang.String value);
 
-   public java.math.BigInteger getPositiveIntegerProperty();
+   java.math.BigInteger getPositiveIntegerProperty();
 
-   public void setPositiveIntegerProperty(java.math.BigInteger value);
+   void setPositiveIntegerProperty(java.math.BigInteger value);
 
-   public java.lang.String getQName();
+   java.lang.String getQName();
 
-   public void setQName(java.lang.String value);
+   void setQName(java.lang.String value);
 
-   public short getShort();
+   short getShort();
 
-   public void setShort(short value);
+   void setShort(short value);
 
-   public java.lang.String getString();
+   java.lang.String getString();
 
-   public void setString(java.lang.String value);
+   void setString(java.lang.String value);
 
-   public java.lang.String getTime();
+   java.lang.String getTime();
 
-   public void setTime(java.lang.String value);
+   void setTime(java.lang.String value);
 
-   public java.lang.String getToken();
+   java.lang.String getToken();
 
-   public void setToken(java.lang.String value);
+   void setToken(java.lang.String value);
 
-   public short getUnsignedByte();
+   short getUnsignedByte();
 
-   public void setUnsignedByte(short value);
+   void setUnsignedByte(short value);
 
-   public long getUnsignedInt();
+   long getUnsignedInt();
 
-   public void setUnsignedInt(long value);
+   void setUnsignedInt(long value);
 
-   public java.math.BigInteger getUnsignedLong();
+   java.math.BigInteger getUnsignedLong();
 
-   public void setUnsignedLong(java.math.BigInteger value);
+   void setUnsignedLong(java.math.BigInteger value);
 
-   public int getUnsignedShort();
+   int getUnsignedShort();
 
-   public void setUnsignedShort(int value);
+   void setUnsignedShort(int value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceA.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceA.java
index e72205d..bc6d6cb 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceA.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceA.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
@@ -16,9 +16,9 @@
 
 public interface InheritanceA {
 
-   public java.lang.String getPropertyA();
+   java.lang.String getPropertyA();
 
-   public void setPropertyA(java.lang.String value);
+   void setPropertyA(java.lang.String value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceB.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceB.java
index 72b589c..75bfdff 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceB.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceB.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
@@ -16,9 +16,9 @@
 
 public interface InheritanceB extends org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.InheritanceA {
 
-   public java.lang.String getPropertyB();
+   java.lang.String getPropertyB();
 
-   public void setPropertyB(java.lang.String value);
+   void setPropertyB(java.lang.String value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceD.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceD.java
index 426719d..2d1ea53 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceD.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/InheritanceD.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
@@ -16,9 +16,9 @@
 
 public interface InheritanceD extends org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.InheritanceC {
 
-   public java.lang.String getPropertyD();
+   java.lang.String getPropertyD();
 
-   public void setPropertyD(java.lang.String value);
+   void setPropertyD(java.lang.String value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeA.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeA.java
index 6b3a713..491092c 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeA.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeA.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
@@ -16,13 +16,13 @@
 
 public interface NonDataTypeA {
 
-   public org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeB getB();
+   org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeB getB();
 
-   public void setB(org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeB value);
+   void setB(org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeB value);
 
-   public org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeC getC();
+   org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeC getC();
 
-   public void setC(org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeC value);
+   void setC(org.eclipse.persistence.testing.sdo.helper.classgen.dynamicimpl.NonDataTypeC value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeB.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeB.java
index d8c538d..eb479d1 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeB.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeB.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
@@ -16,9 +16,9 @@
 
 public interface NonDataTypeB {
 
-   public java.lang.String getProperty();
+   java.lang.String getProperty();
 
-   public void setProperty(java.lang.String value);
+   void setProperty(java.lang.String value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeC.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeC.java
index 12262aa..2a57e85 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeC.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeC.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
@@ -16,9 +16,9 @@
 
 public interface NonDataTypeC {
 
-   public java.lang.String getProperty();
+   java.lang.String getProperty();
 
-   public void setProperty(java.lang.String value);
+   void setProperty(java.lang.String value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyA.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyA.java
index 0c8f8ff..01f62d2 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyA.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyA.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
@@ -16,13 +16,13 @@
 
 public interface NonDataTypeManyA {
 
-   public java.util.List getB();
+   java.util.List getB();
 
-   public void setB(java.util.List value);
+   void setB(java.util.List value);
 
-   public java.util.List getC();
+   java.util.List getC();
 
-   public void setC(java.util.List value);
+   void setC(java.util.List value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyB.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyB.java
index 3ac6fb5..b8a7716 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyB.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyB.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
@@ -16,9 +16,9 @@
 
 public interface NonDataTypeManyB {
 
-   public java.lang.String getProperty();
+   java.lang.String getProperty();
 
-   public void setProperty(java.lang.String value);
+   void setProperty(java.lang.String value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyC.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyC.java
index 2b02123..b271578 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyC.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/NonDataTypeManyC.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
@@ -16,9 +16,9 @@
 
 public interface NonDataTypeManyC {
 
-   public java.lang.String getProperty();
+   java.lang.String getProperty();
 
-   public void setProperty(java.lang.String value);
+   void setProperty(java.lang.String value);
 
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/OneElement.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/OneElement.java
index 39ed162..eb5dd37 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/OneElement.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/OneElement.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
@@ -16,8 +16,8 @@
 
 public interface OneElement {
 
-   public java.lang.String getProperty1();
+   java.lang.String getProperty1();
 
-   public void setProperty1(java.lang.String value);
+   void setProperty1(java.lang.String value);
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/USAddress.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/USAddress.java
index ebeae5b..e643774 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/USAddress.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/USAddress.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
@@ -17,11 +17,11 @@
 import commonj.sdo.DataObject;
 
 public interface USAddress extends DataObject {
-    public java.lang.String getName();
+    java.lang.String getName();
 
-    public void setName(java.lang.String value);
+    void setName(java.lang.String value);
 
-    public java.lang.String getStreet();
+    java.lang.String getStreet();
 
-    public void setStreet(java.lang.String value);
+    void setStreet(java.lang.String value);
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/CompanySuperType.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/CompanySuperType.java
index 4bbfd67..8102215 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/CompanySuperType.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/CompanySuperType.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
@@ -15,12 +15,12 @@
 package org.eclipse.persistence.testing.sdo.helper.xmlhelper.loadandsave.staticclasses;
 
 public interface CompanySuperType {
-       public java.lang.String getCompanyName();
+       java.lang.String getCompanyName();
 
-       public void setCompanyName(java.lang.String value);
+       void setCompanyName(java.lang.String value);
 
-       public boolean getPublic();
+       boolean getPublic();
 
-       public void setPublic(boolean value);
+       void setPublic(boolean value);
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/Address.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/Address.java
index e75b31f..5c715e4 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/Address.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/Address.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
@@ -16,7 +16,7 @@
 
 public interface Address {
 
-    public String getStreet();
-    public void setStreet(String street);
+    String getStreet();
+    void setStreet(String street);
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithCorrectGetters.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithCorrectGetters.java
index 452050f..6ca0154 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithCorrectGetters.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithCorrectGetters.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
@@ -18,13 +18,13 @@
 
 public interface CustomerInterfaceWithCorrectGetters {
 
-    public String getName();
-    public void setName(String name);
+    String getName();
+    void setName(String name);
 
-    public Address getAddress();
-    public void setAddress(Address address);
+    Address getAddress();
+    void setAddress(Address address);
 
-    public List getPhoneNumber();
-    public void setPhoneNumber(List phoneNumber);
+    List getPhoneNumber();
+    void setPhoneNumber(List phoneNumber);
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithIncorrectGetters.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithIncorrectGetters.java
index b65574f..e8f2b57 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithIncorrectGetters.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/instanceclass/CustomerInterfaceWithIncorrectGetters.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
@@ -16,7 +16,7 @@
 
 public interface CustomerInterfaceWithIncorrectGetters {
 
-    public String getFoo();
-    public void setFoo(String foo);
+    String getFoo();
+    void setFoo(String foo);
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/USAddress.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/USAddress.java
index 6575e88..0c151c8 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/USAddress.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/USAddress.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
@@ -17,11 +17,11 @@
 import commonj.sdo.DataObject;
 
 public interface USAddress extends DataObject {
-    public java.lang.String getName();
+    java.lang.String getName();
 
-    public void setName(java.lang.String value);
+    void setName(java.lang.String value);
 
-    public java.lang.String getStreet();
+    java.lang.String getStreet();
 
-    public void setStreet(java.lang.String value);
+    void setStreet(java.lang.String value);
 }
diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/CursorMethod.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/CursorMethod.java
index e24021a..bd42c86 100644
--- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/CursorMethod.java
+++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/CursorMethod.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
@@ -19,13 +19,13 @@
  */
 public interface CursorMethod {
 
-    public TypeClass getReturnEleType();
+    TypeClass getReturnEleType();
 
-    public boolean isSingleCol();
+    boolean isSingleCol();
 
-    public String singleColName();
+    String singleColName();
 
-    public boolean returnBeans();
+    boolean returnBeans();
 
-    public boolean returnResultSet();
+    boolean returnResultSet();
 }
diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/Sortable.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/Sortable.java
index e8997b6..84bcc94 100644
--- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/Sortable.java
+++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/Sortable.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
@@ -16,5 +16,5 @@
 package dbws.testing.shadowddlgeneration.oldjpub;
 
 public interface Sortable {
-    public String getSortingKey();
+    String getSortingKey();
 }
diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/ViewRow.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/ViewRow.java
index d733b20..7553bd2 100644
--- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/ViewRow.java
+++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/ViewRow.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
@@ -16,29 +16,29 @@
 
 public interface ViewRow  {
 
-    public boolean equals(String key, Object value);
+    boolean equals(String key, Object value);
 
-    public boolean isAllCollTypes();
+    boolean isAllCollTypes();
 
-    public boolean isAllMethodParams();
+    boolean isAllMethodParams();
 
-    public boolean isAllMethodResults();
+    boolean isAllMethodResults();
 
-    public boolean isAllObjects();
+    boolean isAllObjects();
 
-    public boolean isAllQueueTables();
+    boolean isAllQueueTables();
 
-    public boolean isAllSynonyms();
+    boolean isAllSynonyms();
 
-    public boolean isAllTypeAttrs();
+    boolean isAllTypeAttrs();
 
-    public boolean isAllTypeMethods();
+    boolean isAllTypeMethods();
 
-    public boolean isAllTypes();
+    boolean isAllTypes();
 
-    public boolean isUserArguments();
+    boolean isUserArguments();
 
-    public boolean isAllArguments();
+    boolean isAllArguments();
 
-    public boolean isSingleColumnViewRow();
+    boolean isSingleColumnViewRow();
 }
diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSBuilderHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSBuilderHelper.java
index 5c75246..250d1c0 100644
--- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSBuilderHelper.java
+++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSBuilderHelper.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
@@ -25,42 +25,42 @@
 
 public interface DBWSBuilderHelper {
 
-    public void buildDbArtifacts();
+    void buildDbArtifacts();
 
-    public void buildOROXProjects(NamingConventionTransformer nct);
-    public void buildOROXProjects(NamingConventionTransformer nct, List<CompositeDatabaseType> types);
+    void buildOROXProjects(NamingConventionTransformer nct);
+    void buildOROXProjects(NamingConventionTransformer nct, List<CompositeDatabaseType> types);
 
     /**
      * Builds a list of type instances based on procedure/function arguments.
      */
-    public List<CompositeDatabaseType> buildTypesList(List<OperationModel> operations);
+    List<CompositeDatabaseType> buildTypesList(List<OperationModel> operations);
 
-    public void buildSchema(NamingConventionTransformer nct);
+    void buildSchema(NamingConventionTransformer nct);
 
-    public void buildSessionsXML(OutputStream dbwsSessionsStream);
+    void buildSessionsXML(OutputStream dbwsSessionsStream);
 
-    public void buildDBWSModel(NamingConventionTransformer nct, OutputStream dbwsServiceStream);
+    void buildDBWSModel(NamingConventionTransformer nct, OutputStream dbwsServiceStream);
 
-    public void buildProcedureOperation(ProcedureOperationModel procedureOperationModel);
+    void buildProcedureOperation(ProcedureOperationModel procedureOperationModel);
 
-    public void writeAttachmentSchema(OutputStream swarefStream);
+    void writeAttachmentSchema(OutputStream swarefStream);
 
-    public void buildWSDL(OutputStream wsdlStream, NamingConventionTransformer nct) throws WSDLException;
+    void buildWSDL(OutputStream wsdlStream, NamingConventionTransformer nct) throws WSDLException;
 
-    public void writeWebXML(OutputStream webXmlStream);
+    void writeWebXML(OutputStream webXmlStream);
 
     /**
      * Write the (optional) deployment descriptor to the given OutputStream.
      */
-    public void writeDeploymentDescriptor(OutputStream deploymentDescriptorStream);
+    void writeDeploymentDescriptor(OutputStream deploymentDescriptorStream);
 
-    public void generateDBWSProvider(OutputStream sourceProviderStream,
-        OutputStream classProviderStream, OutputStream sourceProviderListenerStream,
-        OutputStream classProviderListenerStream);
+    void generateDBWSProvider(OutputStream sourceProviderStream,
+                              OutputStream classProviderStream, OutputStream sourceProviderListenerStream,
+                              OutputStream classProviderListenerStream);
 
-    public void writeSchema(OutputStream dbwsSchemaStream);
+    void writeSchema(OutputStream dbwsSchemaStream);
 
-    public void writeOROXProjects(OutputStream dbwsOrStream, OutputStream dbwsOxStream);
+    void writeOROXProjects(OutputStream dbwsOrStream, OutputStream dbwsOxStream);
 
-    public boolean hasTables();
+    boolean hasTables();
 }
diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSPackager.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSPackager.java
index 1b210ad..bfc76e1 100644
--- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSPackager.java
+++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/DBWSPackager.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
@@ -30,98 +30,98 @@
  */
 public interface DBWSPackager {
 
-    public enum ArchiveUse {
+    enum ArchiveUse {
         archive, noArchive, ignore;
     }
 
     // attribute methods
-    public void setDBWSBuilder(DBWSBuilder builder);
-    public void setAdditionalArgs(String[] additionalArgs);
-    public File getStageDir();
-    public void setStageDir(File stageDir);
-    public String getSessionsFileName();
-    public void setSessionsFileName(String sessionsFileName);
-    public void setHasAttachments(boolean hasAttachments);
-    public boolean hasAttachments();
-    public String getPackagerLabel();
-    public void setArchiveFilename(String archiveFilename);
-    public String getArchiveFilename();
+    void setDBWSBuilder(DBWSBuilder builder);
+    void setAdditionalArgs(String[] additionalArgs);
+    File getStageDir();
+    void setStageDir(File stageDir);
+    String getSessionsFileName();
+    void setSessionsFileName(String sessionsFileName);
+    void setHasAttachments(boolean hasAttachments);
+    boolean hasAttachments();
+    String getPackagerLabel();
+    void setArchiveFilename(String archiveFilename);
+    String getArchiveFilename();
 
-    public void start(); // lifecycle methods
-    public void end();
+    void start(); // lifecycle methods
+    void end();
 
     // call-backs for stream management
-    public OutputStream getSchemaStream() throws FileNotFoundException;
-    public void closeSchemaStream(OutputStream schemaStream);
+    OutputStream getSchemaStream() throws FileNotFoundException;
+    void closeSchemaStream(OutputStream schemaStream);
 
-    public OutputStream getSessionsStream(String sessionsFileName) throws FileNotFoundException;
-    public SessionConfigs buildSessionsXML(OutputStream dbwsSessionsStream, DBWSBuilder builder);
-    public void closeSessionsStream(OutputStream sessionsStream);
+    OutputStream getSessionsStream(String sessionsFileName) throws FileNotFoundException;
+    SessionConfigs buildSessionsXML(OutputStream dbwsSessionsStream, DBWSBuilder builder);
+    void closeSessionsStream(OutputStream sessionsStream);
 
-    public OutputStream getServiceStream() throws FileNotFoundException;
-    public void closeServiceStream(OutputStream serviceStream);
+    OutputStream getServiceStream() throws FileNotFoundException;
+    void closeServiceStream(OutputStream serviceStream);
 
-    public OutputStream getOrStream() throws FileNotFoundException;
-    public String getOrProjectPathPrefix();
-    public void closeOrStream(OutputStream orStream);
+    OutputStream getOrStream() throws FileNotFoundException;
+    String getOrProjectPathPrefix();
+    void closeOrStream(OutputStream orStream);
 
-    public OutputStream getOxStream() throws FileNotFoundException;
-    public String getOxProjectPathPrefix();
-    public void closeOxStream(OutputStream oxStream);
+    OutputStream getOxStream() throws FileNotFoundException;
+    String getOxProjectPathPrefix();
+    void closeOxStream(OutputStream oxStream);
 
-    public OutputStream getWSDLStream() throws FileNotFoundException;
-    public String getWSDLPathPrefix();
-    public void closeWSDLStream(OutputStream wsdlStream);
+    OutputStream getWSDLStream() throws FileNotFoundException;
+    String getWSDLPathPrefix();
+    void closeWSDLStream(OutputStream wsdlStream);
 
-    public OutputStream getSWARefStream() throws FileNotFoundException;
-    public void closeSWARefStream(OutputStream swarefStream);
+    OutputStream getSWARefStream() throws FileNotFoundException;
+    void closeSWARefStream(OutputStream swarefStream);
 
-    public OutputStream getWebXmlStream() throws FileNotFoundException;
-    public void writeWebXml(OutputStream webXmlStream, DBWSBuilder dbwsBuilder);
-    public void closeWebXmlStream(OutputStream webXmlStream);
+    OutputStream getWebXmlStream() throws FileNotFoundException;
+    void writeWebXml(OutputStream webXmlStream, DBWSBuilder dbwsBuilder);
+    void closeWebXmlStream(OutputStream webXmlStream);
 
-    public OutputStream getProviderSourceStream() throws FileNotFoundException;
-    public void closeProviderSourceStream(OutputStream sourceProviderStream);
-    public OutputStream getProviderClassStream() throws FileNotFoundException;
-    public void closeProviderClassStream(OutputStream classProviderStream);
-    public OutputStream getProviderListenerClassStream() throws FileNotFoundException;
-    public void closeProviderListenerClassStream(OutputStream classProviderListenerStream);
-    public OutputStream getProviderListenerSourceStream() throws FileNotFoundException;
-    public void closeProviderListenerSourceStream(OutputStream sourceProviderListenerStream);
-    public void writeProvider(OutputStream sourceProviderStream, OutputStream codeGenProviderStream,
-        OutputStream sourceProviderListenerStream, OutputStream classProviderListenerStream,
-        DBWSBuilder builder);
+    OutputStream getProviderSourceStream() throws FileNotFoundException;
+    void closeProviderSourceStream(OutputStream sourceProviderStream);
+    OutputStream getProviderClassStream() throws FileNotFoundException;
+    void closeProviderClassStream(OutputStream classProviderStream);
+    OutputStream getProviderListenerClassStream() throws FileNotFoundException;
+    void closeProviderListenerClassStream(OutputStream classProviderListenerStream);
+    OutputStream getProviderListenerSourceStream() throws FileNotFoundException;
+    void closeProviderListenerSourceStream(OutputStream sourceProviderListenerStream);
+    void writeProvider(OutputStream sourceProviderStream, OutputStream codeGenProviderStream,
+                       OutputStream sourceProviderListenerStream, OutputStream classProviderListenerStream,
+                       DBWSBuilder builder);
 
     /**
      * Write the deployment descriptor contents to the provided OutputStream.
      */
-    public void writeDeploymentDescriptor(OutputStream descriptorOutputStream);
+    void writeDeploymentDescriptor(OutputStream descriptorOutputStream);
     /**
      * Return an OutputStream to the deployment descriptor.
      */
-    public OutputStream getDeploymentDescriptorStream() throws FileNotFoundException;
+    OutputStream getDeploymentDescriptorStream() throws FileNotFoundException;
     /**
      * Closes the provided OutputStream.
      */
-    public void closeDeploymentDescriptorStream(OutputStream descriptorOutputStream);
+    void closeDeploymentDescriptorStream(OutputStream descriptorOutputStream);
     /**
      * Return the name of the deployment descriptor file - this will depend on the
      * target application server.
      */
-    public String getDeploymentDescriptorFileName();
+    String getDeploymentDescriptorFileName();
 
-    public void setArchiveUse(ArchiveUse archiveUse);
-    public String getUsage();
+    void setArchiveUse(ArchiveUse archiveUse);
+    String getUsage();
 
-    public static interface Archiver {
-        public void setPackager(DBWSPackager packager);
-        public DBWSPackager getPackager();
-        public void archive();
-        public String getFilename();
-        public void setFilename(String filename);
-        public String getOrProjectPathPrefix();
-        public String getOxProjectPathPrefix();
-        public String getWSDLPathPrefix();
+    interface Archiver {
+        void setPackager(DBWSPackager packager);
+        DBWSPackager getPackager();
+        void archive();
+        String getFilename();
+        void setFilename(String filename);
+        String getOrProjectPathPrefix();
+        String getOxProjectPathPrefix();
+        String getWSDLPathPrefix();
     }
 
 }
diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/NamingConventionTransformer.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/NamingConventionTransformer.java
index 1d31020..e660d21 100644
--- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/NamingConventionTransformer.java
+++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/NamingConventionTransformer.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
@@ -14,16 +14,16 @@
 
 public interface NamingConventionTransformer {
 
-    public enum ElementStyle {
+    enum ElementStyle {
         ELEMENT, ATTRIBUTE, NONE
     };
 
-    public String generateSchemaAlias(String tableName);
+    String generateSchemaAlias(String tableName);
 
-    public String generateElementAlias(String originalElementName);
+    String generateElementAlias(String originalElementName);
 
-    public ElementStyle styleForElement(String originalElementName);
+    ElementStyle styleForElement(String originalElementName);
 
-    public static final String DEFAULT_OPTIMISTIC_LOCKING_FIELD = "VERSION";
-    public String getOptimisticLockingField();
+    String DEFAULT_OPTIMISTIC_LOCKING_FIELD = "VERSION";
+    String getOptimisticLockingField();
 }
