update cm to src level 1.8,
make JAnnotationStringValue public (#878),
minor improvements in CM for better usage on SE 11+,add missing xjc export

Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
diff --git a/jaxb-ri/bundles/runtime/src/main/java/module-info.java b/jaxb-ri/bundles/runtime/src/main/java/module-info.java
index 50b27b9..04fbf6e 100644
--- a/jaxb-ri/bundles/runtime/src/main/java/module-info.java
+++ b/jaxb-ri/bundles/runtime/src/main/java/module-info.java
@@ -28,6 +28,7 @@
     exports org.glassfish.jaxb.runtime.v2.model.impl;
     exports org.glassfish.jaxb.runtime.v2.model.runtime;
     exports org.glassfish.jaxb.runtime.v2.runtime;
+    exports org.glassfish.jaxb.runtime.v2.runtime.reflect;
     exports org.glassfish.jaxb.runtime.v2.runtime.unmarshaller;
     exports org.glassfish.jaxb.runtime.v2.schemagen;
     exports org.glassfish.jaxb.runtime.v2.schemagen.xmlschema;
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationArrayMember.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationArrayMember.java
index e900ac4..e7fec50 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationArrayMember.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationArrayMember.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -28,7 +28,7 @@
  *     Bhakti Mehta (bhakti.mehta@sun.com)
  */
 public final class JAnnotationArrayMember extends JAnnotationValue implements JAnnotatable {
-    private final List<JAnnotationValue> values = new ArrayList<JAnnotationValue>();
+    private final List<JAnnotationValue> values = new ArrayList<>();
     private final JCodeModel owner;
 
     JAnnotationArrayMember(JCodeModel owner) {
@@ -160,13 +160,8 @@
      *         the same method multiple times
      */
     public JAnnotationArrayMember param(final Enum<?> value) {
-        JAnnotationValue annotationValue = new JAnnotationValue() {
-            public void generate(JFormatter f) {
-                f.t(owner.ref(value.getDeclaringClass())).p('.').p(value.name());
-            }
-        };
-        values.add(annotationValue);
-        return this;
+        JClass ref = owner.ref(value.getClass());
+        return param(new JEnumConstant(ref, value.name()));
     }
 
     /**
@@ -177,7 +172,7 @@
      *         the same method multiple times
      */
     public JAnnotationArrayMember param(final JEnumConstant value) {
-        JAnnotationValue annotationValue = new JAnnotationStringValue(value);
+        JAnnotationValue annotationValue = new JAnnotationClassValue(value);
         values.add(annotationValue);
         return this;
     }
@@ -203,20 +198,14 @@
      *         the same method multiple times
      */
     public JAnnotationArrayMember param(final Class<?> value){
-       JAnnotationValue annotationValue = new JAnnotationStringValue(
-    		   new JExpressionImpl() {
-      			 public void generate(JFormatter f) {
-      				 f.p(value.getName().replace('$', '.'));
-      				 f.p(".class");
-      			}
-      		 });
-       values.add(annotationValue);
+       JClass ref = owner.ref(value);
+       values.add(new JAnnotationClassValue(ref));
        return this;
    }
 
     public JAnnotationArrayMember param(JType type){
         JClass clazz = type.boxify();
-        JAnnotationValue annotationValue = new JAnnotationStringValue ( clazz.dotclass() );
+        JAnnotationValue annotationValue = new JAnnotationClassValue(clazz);
         values.add(annotationValue);
         return this;
     }
@@ -224,6 +213,7 @@
     /**
      * Adds a new annotation to the array.
      */
+    @Override
     public JAnnotationUse annotate(Class<? extends Annotation> clazz){
         return annotate(owner.ref(clazz));
     }
@@ -231,6 +221,7 @@
     /**
      * Adds a new annotation to the array.
      */
+    @Override
     public JAnnotationUse annotate(JClass clazz){
         JAnnotationUse a = new JAnnotationUse(clazz);
         values.add(a);
@@ -238,10 +229,12 @@
     }
 
 
+    @Override
     public boolean removeAnnotation(JAnnotationUse annotation) {
         return this.values.remove(annotation);
     }
 
+    @Override
     public <W extends JAnnotationWriter> W annotate2(Class<W> clazz) {
         return TypedAnnotationWriter.create(clazz,this);
     }
@@ -250,12 +243,17 @@
      * {@link JAnnotatable#annotations()}
      */
     @SuppressWarnings("unchecked")
-	public Collection<JAnnotationUse> annotations() {
+    @Override
+    public Collection<JAnnotationUse> annotations() {
         // this invocation is invalid if the caller isn't adding annotations into an array
         // so this potentially type-unsafe conversion would be justified.
         return Collections.<JAnnotationUse>unmodifiableList((List)values);
     }
 
+    public Collection<JAnnotationValue> annotations2() {
+        return Collections.unmodifiableList(values);
+    }
+
     /**
      * Adds an annotation member to this annotation  array
      * This can be used for e.g &#64;XmlCollection(values= &#64;XmlCollectionItem(type=Foo.class))
@@ -274,6 +272,7 @@
         return this;
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.p('{').nl().i();
 
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationClassValue.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationClassValue.java
new file mode 100644
index 0000000..33cf6c7
--- /dev/null
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationClassValue.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package com.sun.codemodel;
+
+/**
+ * Captures the Class or Enum value of the annotation.
+ *
+ */
+public final class JAnnotationClassValue extends JAnnotationValue {
+
+    private final JClass type;
+    private String param;
+
+    JAnnotationClassValue(JClass type) {
+        this.type = type;
+    }
+
+    JAnnotationClassValue(JEnumConstant en) {
+        this.type = en.type();
+        this.param = en.getName().substring(en.getName().lastIndexOf('.') + 1);
+    }
+
+
+    @Override
+    public void generate(JFormatter f) {
+        if (param != null) {
+            f.t(type).p('.').p(param);
+        } else {
+            f.t(type).p(".class");
+        }
+    }
+
+    public JClass type() {
+        return type;
+    }
+
+    public String value() {
+        return param;
+    }
+
+}
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationStringValue.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationStringValue.java
index 12e66ec..c3a2e44 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationStringValue.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationStringValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -18,7 +18,7 @@
  * @author
  *     Bhakti Mehta (bhakti.mehta@sun.com)
  */
-final class JAnnotationStringValue extends JAnnotationValue {
+public final class JAnnotationStringValue extends JAnnotationValue {
 
     /**
      * The value of the Annotation member
@@ -29,7 +29,14 @@
         this.value = value;
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.g(value);
     }
+
+    @Override
+    public String toString() {
+        return value.toString();
+    }
+
 }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationUse.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationUse.java
index 0d5891b..cd2f003 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationUse.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAnnotationUse.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -58,8 +58,9 @@
     private void addValue(String name, JAnnotationValue annotationValue) {
         // Use ordered map to keep the code generation the same on any JVM.
         // Lazily created.
-        if(memberValues==null)
-            memberValues = new LinkedHashMap<String, JAnnotationValue>();
+        if(memberValues==null) {
+            memberValues = new LinkedHashMap<>();
+        }
         memberValues.put(name,annotationValue);
     }
 
@@ -252,12 +253,8 @@
      *
      */
     public JAnnotationUse param(String name, final Enum<?> value) {
-        addValue(name, new JAnnotationValue() {
-                    public void generate(JFormatter f) {
-                        f.t(owner().ref(value.getDeclaringClass())).p('.').p(value.name());
-                    }
-                });
-        return this;
+        JClass ref = owner().ref(value.getClass());
+        return param(name, new JEnumConstant(ref, value.name()));
     }
 
     /**
@@ -273,7 +270,7 @@
      *
      */
     public JAnnotationUse param(String name, JEnumConstant value){
-        addValue(name, new JAnnotationStringValue(value));
+        addValue(name, new JAnnotationClassValue(value));
         return this;
     }
 
@@ -297,14 +294,8 @@
       *
       *
       */
-     public JAnnotationUse param(String name, final Class<?> value){
-         addValue(name, new JAnnotationStringValue(
-        		 new JExpressionImpl() {
-        			 public void generate(JFormatter f) {
-        				 f.p(value.getName().replace('$', '.'));
-        				 f.p(".class");
-        			}
-        		 }));
+    public JAnnotationUse param(String name, final Class<?> value) {
+        addValue(name, new JAnnotationClassValue(owner().ref(value)));
          return this;
     }
 
@@ -319,7 +310,7 @@
      */
     public JAnnotationUse param(String name, JType type){
         JClass c = type.boxify();
-        addValue(name, new JAnnotationStringValue ( c.dotclass() ));
+        addValue(name, new JAnnotationClassValue(c));
         return this;
     }
 
@@ -388,6 +379,7 @@
          return annotationUse;
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.p('@').g(clazz);
         if(memberValues!=null) {
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArray.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArray.java
index e552cdf..e15a645 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArray.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArray.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -28,7 +28,7 @@
      */
     public JArray add(JExpression e) {
         if (exprs == null)
-            exprs = new ArrayList<JExpression>();
+            exprs = new ArrayList<>();
         exprs.add(e);
         return this;
     }
@@ -38,6 +38,7 @@
         this.size = size;
     }
 
+    @Override
     public void generate(JFormatter f) {
         
         // generally we produce new T[x], but when T is an array type (T=T'[])
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayClass.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayClass.java
index 4d4b0fc..8296ed1 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayClass.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayClass.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -32,46 +32,57 @@
     }
     
     
+    @Override
     public String name() {
         return componentType.name()+"[]";
     }
     
+    @Override
     public String fullName() {
         return componentType.fullName()+"[]";
     }
 
+    @Override
     public String binaryName() {
         return componentType.binaryName()+"[]";
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.g(componentType).p("[]");
     }
 
+    @Override
     public JPackage _package() {
         return owner().rootPackage();
     }
 
+    @Override
     public JClass _extends() {
         return owner().ref(Object.class);
     }
 
+    @Override
     public Iterator<JClass> _implements() {
         return Collections.<JClass>emptyList().iterator();
     }
 
+    @Override
     public boolean isInterface() {
         return false;
     }
 
+    @Override
     public boolean isAbstract() {
         return false;
     }
 
+    @Override
     public JType elementType() {
         return componentType;
     }
 
+    @Override
     public boolean isArray() {
         return true;
     }
@@ -81,6 +92,7 @@
     // Equality is based on value
     //
 
+    @Override
     public boolean equals(Object obj) {
         if(!(obj instanceof JArrayClass))   return false;
         
@@ -90,10 +102,12 @@
         return false;
     }
 
+    @Override
     public int hashCode() {
         return componentType.hashCode();
     }
 
+    @Override
     protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
         if( componentType.isPrimitive() )
             return this;
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayCompRef.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayCompRef.java
index 9f2a89b..fb3e81b 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayCompRef.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JArrayCompRef.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -43,13 +43,16 @@
         this.index = index;
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.g(array).p('[').g(index).p(']');
     }
 
+    @Override
     public JExpression assign(JExpression rhs) {
 		return JExpr.assign(this,rhs);
     }
+    @Override
     public JExpression assignPlus(JExpression rhs) {
 		return JExpr.assignPlus(this,rhs);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAssignment.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAssignment.java
index 234e23d..a56d64f 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAssignment.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAssignment.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -31,10 +31,12 @@
         this.op = op;
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.g(lhs).p(op + '=').g(rhs);
     }
 
+    @Override
     public void state(JFormatter f) {
         f.g(this).p(';').nl();
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAtom.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAtom.java
index 838cb39..4309c34 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAtom.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JAtom.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -22,7 +22,14 @@
         this.what = what;
     }
     
+    @Override
     public void generate(JFormatter f) {
         f.p(what);
     }
+
+    @Override
+    public String toString() {
+        return what;
+    }
+
 }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBlock.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBlock.java
index 77798c0..c9c0cb0 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBlock.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBlock.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -29,7 +29,7 @@
      * Declarations and statements contained in this block.
      * Either {@link JStatement} or {@link JDeclaration}.
      */
-    private final List<Object> content = new ArrayList<Object>();
+    private final List<Object> content = new ArrayList<>();
 
     /**
      * Whether or not this block must be braced and indented
@@ -390,6 +390,7 @@
      */
     public JStatement directStatement(final String source) {
         JStatement s = new JStatement() {
+            @Override
             public void state(JFormatter f) {
                 f.p(source).nl();
             }
@@ -398,6 +399,7 @@
         return s;
     }
 
+    @Override
     public void generate(JFormatter f) {
         if (bracesRequired)
             f.p('{').nl();
@@ -430,6 +432,7 @@
         return insert(new JForEach( varType, name, collection));
 
     }
+    @Override
     public void state(JFormatter f) {
         f.g(this);
         if (bracesRequired)
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBreak.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBreak.java
index 6f3af04..7e8a50e 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBreak.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JBreak.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -28,6 +28,7 @@
         this.label = _label;
     }
 
+    @Override
     public void state(JFormatter f) {
         if( label==null )
             f.p("break;").nl();
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCase.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCase.java
index 210695b..b3baa4c 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCase.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -55,6 +55,7 @@
         return body;
     }
 
+    @Override
     public void state(JFormatter f) {
         f.i();
         if( !isDefaultCase ) {
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCast.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCast.java
index 054a6dc..1fd8dbb 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCast.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCast.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -41,6 +41,7 @@
         this.object = object;
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.p("((").g(type).p(')').g(object).p(')');
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCatchBlock.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCatchBlock.java
index fd76c56..26d534c 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCatchBlock.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCatchBlock.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -35,6 +35,7 @@
         return body;
     }
 
+    @Override
     public void generate(JFormatter f) {
         if (var == null)
             var = new JVar(JMods.forVar(JMod.NONE),
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JClass.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JClass.java
index e2e8ba1..9fc4691 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JClass.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JClass.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -24,8 +24,8 @@
  * To be exact, this object represents an "use" of a reference type,
  * not necessarily a declaration of it, which is modeled as {@link JDefinedClass}.
  */
-public abstract class JClass extends JType
-{
+public abstract class JClass extends JType {
+
     protected JClass( JCodeModel _owner ) {
         this._owner = _owner;
     }
@@ -38,6 +38,7 @@
      *	For example, this method returns "String" for
      *  {@code java.lang.String}.
      */
+    @Override
     abstract public String name();
 	
 	/**
@@ -56,6 +57,7 @@
 	
     private final JCodeModel _owner;
     /** Gets the JCodeModel object to which this object belongs. */
+    @Override
     public final JCodeModel owner() { return _owner; }
     
     /**
@@ -122,13 +124,16 @@
      * return {@code this}.
      */
     @Deprecated
+    @Override
     public JClass boxify() { return this; }
 
+    @Override
     public JType unboxify() {
         JPrimitiveType pt = getPrimitiveType();
         return pt==null ? (JType)this : pt;
     }
 
+    @Override
     public JClass erasure() {
         return this;
     }
@@ -216,6 +221,7 @@
 
 
     private JClass arrayClass;
+    @Override
     public JClass array() {
         if(arrayClass==null)
             arrayClass = new JArrayClass(owner(),this);
@@ -260,7 +266,7 @@
     }
 
     public JClass narrow( List<? extends JClass> clazz ) {
-        return new JNarrowedClass(this,new ArrayList<JClass>(clazz));
+        return new JNarrowedClass(this,new ArrayList<>(clazz));
     }
 
     /**
@@ -300,6 +306,7 @@
      */
     protected abstract JClass substituteParams( JTypeVar[] variables, List<JClass> bindings );
     
+    @Override
     public String toString() {
         return this.getClass().getName() + '(' + name() + ')';
     }
@@ -329,6 +336,7 @@
         return new JFieldRef(this, field);
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.t(this);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCodeModel.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCodeModel.java
index 1a70933..cf61b7d 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCodeModel.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCodeModel.java
@@ -554,7 +554,7 @@
                 throw new IllegalArgumentException();
             idx++;
 
-            List<JClass> args = new ArrayList<JClass>();
+            List<JClass> args = new ArrayList<>();
 
             while(true) {
                 args.add(parseTypeName());
@@ -593,24 +593,29 @@
             assert !_class.isArray();
         }
 
+        @Override
         public String name() {
             return _class.getSimpleName().replace('$','.');
         }
 
+        @Override
         public String fullName() {
             return _class.getName().replace('$','.');
         }
 
+        @Override
         public String binaryName() {
             return _class.getName();
         }
 
+        @Override
         public JClass outer() {
             Class<?> p = _class.getDeclaringClass();
             if(p==null)     return null;
             return ref(p);
         }
 
+        @Override
         public JPackage _package() {
             String name = fullName();
 
@@ -626,6 +631,7 @@
                 return JCodeModel.this._package(name.substring(0, idx));
         }
 
+        @Override
         public JClass _extends() {
             Class<?> sp = _class.getSuperclass();
             if (sp == null) {
@@ -636,30 +642,37 @@
                 return ref(sp);
         }
 
+        @Override
         public Iterator<JClass> _implements() {
             final Class<?>[] interfaces = _class.getInterfaces();
             return new Iterator<JClass>() {
                 private int idx = 0;
+                @Override
                 public boolean hasNext() {
                     return idx < interfaces.length;
                 }
+                @Override
                 public JClass next() {
                     return JCodeModel.this.ref(interfaces[idx++]);
                 }
+                @Override
                 public void remove() {
                     throw new UnsupportedOperationException();
                 }
             };
         }
 
+        @Override
         public boolean isInterface() {
             return _class.isInterface();
         }
 
+        @Override
         public boolean isAbstract() {
             return Modifier.isAbstract(_class.getModifiers());
         }
 
+        @Override
         public JPrimitiveType getPrimitiveType() {
             Class<?> v = boxToPrimitive.get(_class);
             if(v!=null)
@@ -668,18 +681,22 @@
                 return null;
         }
 
+        @Override
         public boolean isArray() {
             return false;
         }
 
+        @Override
         public void declare(JFormatter f) {
         }
 
+        @Override
         public JTypeVar[] typeParams() {
             // TODO: does JDK 1.5 reflection provides these information?
             return super.typeParams();
         }
 
+        @Override
         protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
             // TODO: does JDK 1.5 reflection provides these information?
             return this;
@@ -697,8 +714,8 @@
     public static final Map<Class<?>,Class<?>> boxToPrimitive;
 
     static {
-        Map<Class<?>,Class<?>> m1 = new HashMap<Class<?>,Class<?>>();
-        Map<Class<?>,Class<?>> m2 = new HashMap<Class<?>,Class<?>>();
+        Map<Class<?>,Class<?>> m1 = new HashMap<>();
+        Map<Class<?>,Class<?>> m2 = new HashMap<>();
 
         m1.put(Boolean.class,Boolean.TYPE);
         m1.put(Byte.class,Byte.TYPE);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCommentPart.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCommentPart.java
index a489f30..3c800f5 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCommentPart.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JCommentPart.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -43,6 +43,7 @@
         return this;
     }
 
+        @Override
     public boolean add(Object o) {
         flattenAppend(o);
         return true;
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JConditional.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JConditional.java
index 15cbd33..2e8a8ab 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JConditional.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JConditional.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -67,6 +67,7 @@
         return _else()._if(boolExp);
     }
 
+    @Override
     public void state(JFormatter f) {
         if(test==JExpr.TRUE) {
             _then.generateBody(f);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JContinue.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JContinue.java
index 814fe61..b323ea8 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JContinue.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JContinue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -28,6 +28,7 @@
         this.label = _label;
     }
 
+    @Override
     public void state(JFormatter f) {
         if( label==null )
             f.p("continue;").nl();
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDefinedClass.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDefinedClass.java
index cbcaae1..686ee8d 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDefinedClass.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDefinedClass.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -48,10 +48,10 @@
     private JClass superClass;
 
     /** List of interfaces that this class implements */
-    private final Set<JClass> interfaces = new TreeSet<JClass>();
+    private final Set<JClass> interfaces = new TreeSet<>();
 
     /** Fields keyed by their names. */
-    /*package*/ final Map<String,JFieldVar> fields = new LinkedHashMap<String,JFieldVar>();
+    /*package*/ final Map<String,JFieldVar> fields = new LinkedHashMap<>();
 
     /** Static initializer, if this class has one */
     private JBlock init = null;
@@ -63,10 +63,10 @@
     private JDocComment jdoc = null;
 
     /** Set of constructors for this class, if any */
-    private final List<JMethod> constructors = new ArrayList<JMethod>();
+    private final List<JMethod> constructors = new ArrayList<>();
 
     /** Set of methods that are members of this class */
-    private final List<JMethod> methods = new ArrayList<JMethod>();
+    private final List<JMethod> methods = new ArrayList<>();
 
     /**
      * Nested classes as a map from name to JDefinedClass.
@@ -125,7 +125,7 @@
      * In Java, enum constant order is actually significant,
      * because of order ID they get. So let's preserve the order.
      */
-    private final Map<String,JEnumConstant> enumConstantsByName = new LinkedHashMap<String,JEnumConstant>();
+    private final Map<String,JEnumConstant> enumConstantsByName = new LinkedHashMap<>();
 
     /**
      * Annotations on this variable. Lazily created.
@@ -137,6 +137,7 @@
      * Helper class to implement {@link JGenerifiable}.
      */
     private final JGenerifiableImpl generifiable = new JGenerifiableImpl() {
+        @Override
         protected JCodeModel owner() {
             return JDefinedClass.this.owner();
         }
@@ -258,6 +259,7 @@
     /**
      * Returns the class extended by this class.
      */
+    @Override
     public JClass _extends() {
         if(superClass==null)
             superClass = owner().ref(Object.class);
@@ -285,6 +287,7 @@
      * Returns an iterator that walks the nested classes defined in this
      * class.
      */
+    @Override
     public Iterator<JClass> _implements() {
         return interfaces.iterator();
     }
@@ -298,6 +301,7 @@
      *
      * @return Name of this class
      */
+    @Override
     public String name() {
         return name;
     }
@@ -322,8 +326,18 @@
     }
 
     /**
+     * Returns set of enum constants keyed by names.
+     *
+     * @return Set of enum constants keyed by names
+     */
+    public Map<String, JEnumConstant> enumConstants() {
+        return Collections.unmodifiableMap(enumConstantsByName);
+    }
+
+    /**
      * Gets the fully qualified name of this class.
      */
+    @Override
     public String fullName() {
         if (outer instanceof JDefinedClass)
             return ((JDefinedClass) outer).fullName() + '.' + name();
@@ -343,10 +357,12 @@
             return fullName();
     }
 
+    @Override
     public boolean isInterface() {
         return this.classType==ClassType.INTERFACE;
     }
 
+    @Override
     public boolean isAbstract() {
         return mods.isAbstract();
     }
@@ -422,6 +438,7 @@
      *      When the specified class/interface was already created.
      
      */
+    @Override
     public JDefinedClass _annotationTypeDeclaration(String name) throws JClassAlreadyExistsException {
     	return _class (JMod.PUBLIC,name,ClassType.ANNOTATION_TYPE_DECL);
     }
@@ -436,6 +453,7 @@
      *      When the specified class/interface was already created.
      
      */
+    @Override
     public JDefinedClass _enum (String name) throws JClassAlreadyExistsException {
     	return _class (JMod.PUBLIC,name,ClassType.ENUM);
     }
@@ -601,12 +619,15 @@
         return null;
     }
 
+    @Override
     public boolean isClass() {
         return true;
     }
+    @Override
     public boolean isPackage() {
         return false;
     }
+    @Override
     public JPackage getPackage() { return parentContainer().getPackage(); }
 
     /**
@@ -620,6 +641,7 @@
      *
      * @return Newly generated class
      */
+    @Override
     public JDefinedClass _class(int mods, String name)
         throws JClassAlreadyExistsException {
         return _class(mods, name, ClassType.CLASS);
@@ -631,10 +653,12 @@
      * @deprecated
      */
     @Deprecated
+    @Override
     public JDefinedClass _class(int mods, String name, boolean isInterface) throws JClassAlreadyExistsException {
     	return _class(mods,name,isInterface?ClassType.INTERFACE:ClassType.CLASS);
     }
 
+    @Override
     public JDefinedClass _class(int mods, String name, ClassType classTypeVal)
         throws JClassAlreadyExistsException {
 
@@ -657,6 +681,7 @@
     /**
      * Add a new public nested class to this class.
      */
+    @Override
     public JDefinedClass _class(String name)
         throws JClassAlreadyExistsException {
         return _class(JMod.PUBLIC, name);
@@ -673,6 +698,7 @@
      *
      * @return Newly generated interface
      */
+    @Override
     public JDefinedClass _interface(int mods, String name)
         throws JClassAlreadyExistsException {
         return _class(mods, name, ClassType.INTERFACE);
@@ -681,6 +707,7 @@
     /**
      * Adds a public interface to this package.
      */
+    @Override
     public JDefinedClass _interface(String name)
         throws JClassAlreadyExistsException {
         return _interface(JMod.PUBLIC, name);
@@ -692,6 +719,7 @@
      *
      * @return JDocComment containing javadocs for this class
      */
+    @Override
     public JDocComment javadoc() {
         if (jdoc == null)
             jdoc = new JDocComment(owner());
@@ -718,6 +746,7 @@
      * Returns an iterator that walks the nested classes defined in this
      * class.
      */
+    @Override
     public final Iterator<JDefinedClass> classes() {
         if(classes==null)
             return Collections.<JDefinedClass>emptyList().iterator();
@@ -727,7 +756,7 @@
 
     private Map<String,JDefinedClass> getClasses() {
         if(classes==null)
-            classes = new TreeMap<String,JDefinedClass>();
+            classes = new TreeMap<>();
         return classes;
     }
 
@@ -750,6 +779,7 @@
             return null;
     }
 
+    @Override
     public void declare(JFormatter f) {
         if (jdoc != null)
             f.nl().g(jdoc);
@@ -826,23 +856,28 @@
             directBlock += string;
     }
 
+    @Override
     public final JPackage _package() {
         JClassContainer p = outer;
-        while (!(p instanceof JPackage))
+        while (p != null && !(p instanceof JPackage))
             p = p.parentContainer();
         return (JPackage) p;
     }
 
+    @Override
     public final JClassContainer parentContainer() {
         return outer;
     }
 
+    @Override
     public JTypeVar generify(String name) {
         return generifiable.generify(name);
     }
+    @Override
     public JTypeVar generify(String name, Class<?> bound) {
         return generifiable.generify(name, bound);
     }
+    @Override
     public JTypeVar generify(String name, JClass bound) {
         return generifiable.generify(name, bound);
     }
@@ -851,6 +886,7 @@
         return generifiable.typeParams();
     }
 
+    @Override
     protected JClass substituteParams(
         JTypeVar[] variables,
         List<JClass> bindings) {
@@ -861,6 +897,7 @@
      * @param clazz
      *          The annotation class to annotate the class with
      */
+    @Override
     public JAnnotationUse annotate(Class <? extends Annotation> clazz){
         return annotate(owner().ref(clazz));
     }
@@ -869,18 +906,21 @@
       * @param clazz
       *          The annotation class to annotate the class with
       */
+    @Override
      public JAnnotationUse annotate(JClass clazz){
         if(annotations==null)
-           annotations = new ArrayList<JAnnotationUse>();
+           annotations = new ArrayList<>();
         JAnnotationUse a = new JAnnotationUse(clazz);
         annotations.add(a);
         return a;
     }
 
+    @Override
     public <W extends JAnnotationWriter> W annotate2(Class<W> clazz) {
         return TypedAnnotationWriter.create(clazz,this);
     }
 
+    @Override
     public boolean removeAnnotation(JAnnotationUse annotation) {
         return this.annotations.remove(annotation);
     }
@@ -888,9 +928,10 @@
     /**
      * {@link JAnnotatable#annotations()}
      */
+    @Override
     public Collection<JAnnotationUse> annotations() {
         if (annotations == null)
-            annotations = new ArrayList<JAnnotationUse>();
+            annotations = new ArrayList<>();
         return Collections.unmodifiableCollection(annotations);
     }
 
@@ -902,4 +943,8 @@
     public JMods mods() {
         return mods;
     }
+
+    public JClass superClass() {
+        return superClass;
+    }
 }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDirectClass.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDirectClass.java
index 8601185..5c706af 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDirectClass.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDirectClass.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -29,38 +29,46 @@
         this.fullName = fullName;
     }
 
+    @Override
     public String name() {
         int i = fullName.lastIndexOf('.');
         if(i>=0)    return fullName.substring(i+1);
         return fullName;
     }
 
+    @Override
     public String fullName() {
         return fullName;
     }
 
+    @Override
     public JPackage _package() {
         int i = fullName.lastIndexOf('.');
         if(i>=0)    return owner()._package(fullName.substring(0,i));
         else        return owner().rootPackage();
     }
 
+    @Override
     public JClass _extends() {
         return owner().ref(Object.class);
     }
 
+    @Override
     public Iterator<JClass> _implements() {
         return Collections.<JClass>emptyList().iterator();
     }
 
+    @Override
     public boolean isInterface() {
         return false;
     }
 
+    @Override
     public boolean isAbstract() {
         return false;
     }
 
+    @Override
     protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
         return this;
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDoLoop.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDoLoop.java
index 01c214a..e6aa908 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDoLoop.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDoLoop.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -39,6 +39,7 @@
         return body;
     }
 
+    @Override
     public void state(JFormatter f) {
         f.p("do");
         if (body != null)
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDocComment.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDocComment.java
index 1e50fd1..d85a465 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDocComment.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JDocComment.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -28,13 +28,13 @@
 	private static final long serialVersionUID = 1L;
 
 	/** list of @param tags */
-    private final Map<String,JCommentPart> atParams = new HashMap<String,JCommentPart>();
+    private final Map<String,JCommentPart> atParams = new HashMap<>();
     
     /** list of xdoclets */
-    private final Map<String,Map<String,String>> atXdoclets = new HashMap<String,Map<String,String>>();
+    private final Map<String,Map<String,String>> atXdoclets = new HashMap<>();
     
     /** list of @throws tags */
-    private final Map<JClass,JCommentPart> atThrows = new HashMap<JClass,JCommentPart>();
+    private final Map<JClass,JCommentPart> atThrows = new HashMap<>();
     
     /**
      * The @return tag part.
@@ -51,6 +51,7 @@
         this.owner = owner;
     }
 
+        @Override
     public JDocComment append(Object o) {
         add(o);
         return this;
@@ -115,7 +116,7 @@
     public Map<String,String> addXdoclet(String name) {
         Map<String,String> p = atXdoclets.get(name);
         if(p==null)
-            atXdoclets.put(name,p=new HashMap<String,String>());
+            atXdoclets.put(name,p=new HashMap<>());
         return p;
     }
 
@@ -125,7 +126,7 @@
     public Map<String,String> addXdoclet(String name, Map<String,String> attributes) {
         Map<String,String> p = atXdoclets.get(name);
         if(p==null)
-            atXdoclets.put(name,p=new HashMap<String,String>());
+            atXdoclets.put(name,p=new HashMap<>());
         p.putAll(attributes);
         return p;
     }
@@ -136,11 +137,12 @@
     public Map<String,String> addXdoclet(String name, String attribute, String value) {
         Map<String,String> p = atXdoclets.get(name);
         if(p==null)
-            atXdoclets.put(name,p=new HashMap<String,String>());
+            atXdoclets.put(name,p=new HashMap<>());
         p.put(attribute, value);
         return p;
     }
 
+        @Override
     public void generate(JFormatter f) {
         // I realized that we can't use StringTokenizer because
         // this will recognize multiple \n as one token.
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JEnumConstant.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JEnumConstant.java
index 150c74b..a358efa 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JEnumConstant.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JEnumConstant.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -33,7 +33,7 @@
     /**
      * The enum class.
      */
-    private final JDefinedClass type;
+    private final JClass type;
     /**
      * javadoc comments, if any.
      */
@@ -51,7 +51,7 @@
      */
     private List<JExpression> args = null;
 
-    JEnumConstant(JDefinedClass type,String name) {
+    JEnumConstant(JClass type,String name) {
         this.name = name;
         this.type = type;
     }
@@ -65,7 +65,7 @@
     public JEnumConstant arg(JExpression arg) {
         if(arg==null)   throw new IllegalArgumentException();
         if(args==null)
-            args = new ArrayList<JExpression>();
+            args = new ArrayList<>();
         args.add(arg);
         return this;
     }
@@ -79,11 +79,17 @@
     	return this.type.fullName().concat(".").concat(this.name);
     }
 
+    @Override
+    public String toString() {
+        return name;
+    }
+
     /**
      * Creates, if necessary, and returns the enum constant javadoc.
      *
      * @return JDocComment containing javadocs for this constant.
      */
+    @Override
     public JDocComment javadoc() {
         if (jdoc == null)
             jdoc = new JDocComment(type.owner());
@@ -95,9 +101,10 @@
      * @param clazz
      *          The annotation class to annotate the field with
      */
+    @Override
     public JAnnotationUse annotate(JClass clazz){
         if(annotations==null)
-           annotations = new ArrayList<JAnnotationUse>();
+           annotations = new ArrayList<>();
         JAnnotationUse a = new JAnnotationUse(clazz);
         annotations.add(a);
         return a;
@@ -109,26 +116,31 @@
      * @param clazz
      *          The annotation class to annotate the field with
      */
+    @Override
     public JAnnotationUse annotate(Class <? extends Annotation> clazz){
         return annotate(type.owner().ref(clazz));
     }
 
+    @Override
     public <W extends JAnnotationWriter> W annotate2(Class<W> clazz) {
         return TypedAnnotationWriter.create(clazz,this);
     }
 
+    @Override
     public boolean removeAnnotation(JAnnotationUse annotation) {
         return this.annotations.remove(annotation);
     }
     /**
      * {@link JAnnotatable#annotations()}
      */
+    @Override
     public Collection<JAnnotationUse> annotations() {
         if (annotations == null)
-            annotations = new ArrayList<JAnnotationUse>();
+            annotations = new ArrayList<>();
         return Collections.unmodifiableList(annotations);
     }
 
+    @Override
     public void declare(JFormatter f) {
         if( jdoc != null )
             f.nl().g( jdoc );
@@ -142,7 +154,12 @@
         }
     }
 
+    @Override
     public void generate(JFormatter f) {
     	f.t(type).p('.').p(name);
     }
+
+    JClass type() {
+        return type;
+    }
 }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpr.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpr.java
index 2065356..6f5f8e7 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpr.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpr.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -71,6 +71,7 @@
 
     public static JExpression dotclass(final JClass cl) {
         return new JExpressionImpl() {
+                @Override
                 public void generate(JFormatter f) {
                     JClass c;
                     if(cl instanceof JNarrowedClass)
@@ -266,6 +267,7 @@
      */
     public static JExpression direct( final String source ) {
         return new JExpressionImpl(){
+            @Override
             public void generate( JFormatter f ) {
                     f.p('(').p(source).p(')');
             }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpressionImpl.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpressionImpl.java
index 836514b..e9098be 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpressionImpl.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JExpressionImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,13 +13,13 @@
 /**
  * Provides default implementations for {@link JExpression}.
  */
-public abstract class JExpressionImpl implements JExpression
-{
+public abstract class JExpressionImpl implements JExpression {
     //
     //
     // from JOp
     //
     //
+    @Override
     public final JExpression minus() {
         return JOp.minus(this);
     }
@@ -27,98 +27,122 @@
     /**
      * Logical not {@code '!x'}.
      */
+    @Override
     public final JExpression not() {
         return JOp.not(this);
     }
 
+    @Override
     public final JExpression complement() {
         return JOp.complement(this);
     }
 
+    @Override
     public final JExpression incr() {
         return JOp.incr(this);
     }
 
+    @Override
     public final JExpression decr() {
         return JOp.decr(this);
     }
 
+    @Override
     public final JExpression plus(JExpression right) {
         return JOp.plus(this, right);
     }
 
+    @Override
     public final JExpression minus(JExpression right) {
         return JOp.minus(this, right);
     }
 
+    @Override
     public final JExpression mul(JExpression right) {
         return JOp.mul(this, right);
     }
 
+    @Override
     public final JExpression div(JExpression right) {
         return JOp.div(this, right);
     }
 
+    @Override
     public final JExpression mod(JExpression right) {
         return JOp.mod(this, right);
     }
 
+    @Override
     public final JExpression shl(JExpression right) {
         return JOp.shl(this, right);
     }
 
+    @Override
     public final JExpression shr(JExpression right) {
         return JOp.shr(this, right);
     }
 
+    @Override
     public final JExpression shrz(JExpression right) {
         return JOp.shrz(this, right);
     }
 
+    @Override
     public final JExpression band(JExpression right) {
         return JOp.band(this, right);
     }
 
+    @Override
     public final JExpression bor(JExpression right) {
         return JOp.bor(this, right);
     }
 
+    @Override
     public final JExpression cand(JExpression right) {
         return JOp.cand(this, right);
     }
 
+    @Override
     public final JExpression cor(JExpression right) {
         return JOp.cor(this, right);
     }
 
+    @Override
     public final JExpression xor(JExpression right) {
         return JOp.xor(this, right);
     }
 
+    @Override
     public final JExpression lt(JExpression right) {
         return JOp.lt(this, right);
     }
 
+    @Override
     public final JExpression lte(JExpression right) {
         return JOp.lte(this, right);
     }
 
+    @Override
     public final JExpression gt(JExpression right) {
         return JOp.gt(this, right);
     }
 
+    @Override
     public final JExpression gte(JExpression right) {
         return JOp.gte(this, right);
     }
 
+    @Override
     public final JExpression eq(JExpression right) {
         return JOp.eq(this, right);
     }
 
+    @Override
     public final JExpression ne(JExpression right) {
         return JOp.ne(this, right);
     }
 
+    @Override
     public final JExpression _instanceof(JType right) {
         return JOp._instanceof(this, right);
     }
@@ -128,22 +152,27 @@
     // from JExpr
     //
     //
+    @Override
     public final JInvocation invoke(JMethod method) {
         return JExpr.invoke(this, method);
     }
 
+    @Override
     public final JInvocation invoke(String method) {
         return JExpr.invoke(this, method);
     }
 
+    @Override
     public final JFieldRef ref(JVar field) {
         return JExpr.ref(this, field);
     }
 
+    @Override
     public final JFieldRef ref(String field) {
         return JExpr.ref(this, field);
     }
 
+    @Override
     public final JArrayCompRef component(JExpression index) {
         return JExpr.component(this, index);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldRef.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldRef.java
index f2938f7..1cf0989 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldRef.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldRef.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -80,6 +80,7 @@
         this.var = var;
     }
 
+    @Override
     public void generate(JFormatter f) {
         String name = this.name;
         if(name==null)  name=var.name();
@@ -95,9 +96,11 @@
         }
     }
 
+    @Override
     public JExpression assign(JExpression rhs) {
         return JExpr.assign(this, rhs);
     }
+    @Override
     public JExpression assignPlus(JExpression rhs) {
         return JExpr.assignPlus(this, rhs);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldVar.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldVar.java
index 6b31d9b..ee5071e 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldVar.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFieldVar.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -60,12 +60,14 @@
      *
      * @return JDocComment containing javadocs for this class
      */
+    @Override
     public JDocComment javadoc() {
         if( jdoc == null ) 
             jdoc = new JDocComment(owner.owner());
         return jdoc;
     }
 
+    @Override
     public void declare(JFormatter f) {
         if( jdoc != null )
             f.g( jdoc );
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForEach.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForEach.java
index 7fc374e..4d6ad51 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForEach.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForEach.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -47,6 +47,7 @@
 		return body;
 	}
 
+        @Override
 	public void state(JFormatter f) {
 		f.p("for (");
 		f.g(type).id(var).p(": ").g(collection);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForLoop.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForLoop.java
index c5d6653..838d38f 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForLoop.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JForLoop.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -20,9 +20,9 @@
 
 public class JForLoop implements JStatement {
     
-    private List<Object> inits = new ArrayList<Object>();
+    private List<Object> inits = new ArrayList<>();
     private JExpression test = null;
-    private List<JExpression> updates = new ArrayList<JExpression>();
+    private List<JExpression> updates = new ArrayList<>();
     private JBlock body = null;
     
     public JVar init(int mods, JType type, String var, JExpression e) {
@@ -52,6 +52,7 @@
         return body;
     }
     
+    @Override
     public void state(JFormatter f) {
         f.p("for (");
         boolean first = true;
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFormatter.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFormatter.java
index add190c..b336c9a 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFormatter.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JFormatter.java
@@ -101,9 +101,9 @@
     public JFormatter(PrintWriter s, String space, Map<String, String> classNameReplacer) {
         pw = s;
         indentSpace = space;
-        collectedReferences = new HashMap<String,ReferenceList>();
+        collectedReferences = new HashMap<>();
         //ids = new HashSet<String>();
-        importedClasses = new HashSet<JClass>();
+        importedClasses = new HashSet<>();
         this.classNameReplacer = classNameReplacer;
     }
 
@@ -513,7 +513,7 @@
      * @author Ryan.Shoemaker@Sun.COM
      */
     final class ReferenceList {
-        private final ArrayList<JClass> classes = new ArrayList<JClass>();
+        private final ArrayList<JClass> classes = new ArrayList<>();
 
         /** true if this name is used as an identifier (like a variable name.) **/
         private boolean id;
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JGenerifiableImpl.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JGenerifiableImpl.java
index 2ac7080..8c43bb0 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JGenerifiableImpl.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JGenerifiableImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -26,6 +26,7 @@
     
     protected abstract JCodeModel owner();
     
+    @Override
     public void declare( JFormatter f ) {
         if(typeVariables!=null) {
             f.p('<');
@@ -38,22 +39,26 @@
     }
 
 
+    @Override
     public JTypeVar generify(String name) {
         JTypeVar v = new JTypeVar(owner(),name);
         if(typeVariables==null)
-            typeVariables = new ArrayList<JTypeVar>(3);
+            typeVariables = new ArrayList<>(3);
         typeVariables.add(v);
         return v;
     }
 
+    @Override
     public JTypeVar generify(String name, Class<?> bound) {
         return generify(name,owner().ref(bound));
     }
 
+    @Override
     public JTypeVar generify(String name, JClass bound) {
         return generify(name).bound(bound);
     }
     
+    @Override
     public JTypeVar[] typeParams() {
         if(typeVariables==null)
             return JTypeVar.EMPTY_ARRAY;
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JInvocation.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JInvocation.java
index d75ade4..c1cce63 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JInvocation.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JInvocation.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -40,7 +40,7 @@
     /**
      * List of argument expressions for this method invocation
      */
-    private List<JExpression> args = new ArrayList<JExpression>();
+    private List<JExpression> args = new ArrayList<>();
 
     /**
      * If isConstructor==true, this field keeps the type to be created.
@@ -134,6 +134,7 @@
 		return args.toArray(new JExpression[args.size()]);
 	}
 
+    @Override
     public void generate(JFormatter f) {
         if (isConstructor && type.isArray()) {
             // [RESULT] new T[]{arg1,arg2,arg3,...};
@@ -164,6 +165,7 @@
         }
     }
 
+    @Override
     public void state(JFormatter f) {
         f.g(this).p(';').nl();
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JLabel.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JLabel.java
index 92d62c2..9c6a116 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JLabel.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JLabel.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -30,6 +30,7 @@
         this.label = _label;
     }
 
+    @Override
     public void state(JFormatter f) {
         f.p(label+':').nl();
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMethod.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMethod.java
index 3e7fb3e..1703eb9 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMethod.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMethod.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -7,7 +7,6 @@
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
-
 package com.sun.codemodel;
 
 import java.lang.annotation.Annotation;
@@ -25,214 +24,202 @@
  */
 public class JMethod extends JGenerifiableImpl implements JDeclaration, JAnnotatable, JDocCommentable {
 
-	/**
-	 * Modifiers for this method
-	 */
-	private JMods mods;
+    /**
+     * Modifiers for this method
+     */
+    private JMods mods;
 
-	/**
-	 * Return type for this method
-	 */
-	private JType type = null;
+    /**
+     * Return type for this method
+     */
+    private JType type = null;
 
-	/**
-	 * Name of this method
-	 */
-	private String name = null;
+    /**
+     * Name of this method
+     */
+    private String name = null;
 
-	/**
-	 * List of parameters for this method's declaration
-	 */
-	private final List<JVar> params = new ArrayList<JVar>();
+    /**
+     * List of parameters for this method's declaration
+     */
+    private final List<JVar> params = new ArrayList<>();
 
-	/**
-	 * Set of exceptions that this method may throw.
-     * A set instance lazily created.
-	 */
-	private Set<JClass> _throws;
+    /**
+     * Set of exceptions that this method may throw. A set instance lazily
+     * created.
+     */
+    private Set<JClass> _throws;
 
-	/**
-	 * JBlock of statements that makes up the body this method
-	 */
-	private JBlock body = null;
+    /**
+     * JBlock of statements that makes up the body this method
+     */
+    private JBlock body = null;
 
-	private JDefinedClass outer;
+    private JDefinedClass outer;
 
-	/**
-	 * javadoc comments for this JMethod
-	 */
-	private JDocComment jdoc = null;
+    /**
+     * javadoc comments for this JMethod
+     */
+    private JDocComment jdoc = null;
 
-	/**
-	 * Variable parameter for this method's varargs declaration
-	 * introduced in J2SE 1.5
-	 */
-	private JVar varParam = null;
+    /**
+     * Variable parameter for this method's varargs declaration introduced in
+     * J2SE 1.5
+     */
+    private JVar varParam = null;
 
     /**
      * Annotations on this variable. Lazily created.
      */
     private List<JAnnotationUse> annotations = null;
 
+    private boolean isConstructor() {
+        return type == null;
+    }
 
-	private boolean isConstructor() {
-		return type == null;
-	}
-    
-    /** To set the default value for the
-     *  annotation member
+    /**
+     * To set the default value for the annotation member
      */
     private JExpression defaultValue = null;
-    
 
-	/**
-	 * JMethod constructor
-	 *
-	 * @param mods
-	 *        Modifiers for this method's declaration
-	 *
-	 * @param type
-	 *        Return type for the method
-	 *
-	 * @param name
-	 *        Name of this method
-	 */
-	JMethod(JDefinedClass outer, int mods, JType type, String name) {
-		this.mods = JMods.forMethod(mods);
-		this.type = type;
-		this.name = name;
-		this.outer = outer;
-	}
+    /**
+     * JMethod constructor
+     *
+     * @param mods Modifiers for this method's declaration
+     *
+     * @param type Return type for the method
+     *
+     * @param name Name of this method
+     */
+    JMethod(JDefinedClass outer, int mods, JType type, String name) {
+        this.mods = JMods.forMethod(mods);
+        this.type = type;
+        this.name = name;
+        this.outer = outer;
+    }
 
-	/**
-	 * Constructor constructor
-	 *
-	 * @param mods
-	 *        Modifiers for this constructor's declaration
-	 *
-	 * @param _class
-	 *        JClass containing this constructor
-	 */
-	JMethod(int mods, JDefinedClass _class) {
-		this.mods = JMods.forMethod(mods);
-		this.type = null;
-		this.name = _class.name();
-		this.outer = _class;
-	}
-    
+    /**
+     * Constructor constructor
+     *
+     * @param mods Modifiers for this constructor's declaration
+     *
+     * @param _class JClass containing this constructor
+     */
+    JMethod(int mods, JDefinedClass _class) {
+        this.mods = JMods.forMethod(mods);
+        this.type = null;
+        this.name = _class.name();
+        this.outer = _class;
+    }
+
     private Set<JClass> getThrows() {
-        if(_throws==null)
-            _throws = new TreeSet<JClass>(ClassNameComparator.theInstance);
+        if (_throws == null) {
+            _throws = new TreeSet<>(ClassNameComparator.theInstance);
+        }
         return _throws;
     }
 
-	/**
-	 * Add an exception to the list of exceptions that this
-	 * method may throw.
-	 *
-	 * @param exception
-	 *        Name of an exception that this method may throw
-	 */
-	public JMethod _throws(JClass exception) {
+    /**
+     * Add an exception to the list of exceptions that this method may throw.
+     *
+     * @param exception Name of an exception that this method may throw
+     */
+    public JMethod _throws(JClass exception) {
         getThrows().add(exception);
-		return this;
-	}
+        return this;
+    }
 
-	public JMethod _throws(Class<? extends Throwable> exception) {
-		return _throws(outer.owner().ref(exception));
-	}
-
-	/**
-	 * Returns the list of variable of this method.
-	 *
-	 * @return List of parameters of this method. This list is not modifiable.
-	 */
-	public List<JVar> params() {
-		return Collections.<JVar>unmodifiableList(params);
-	}
-	
-	/**
-	 * Add the specified variable to the list of parameters
-	 * for this method signature.
-	 *
-	 * @param type
-	 *        JType of the parameter being added
-	 *
-	 * @param name
-	 *        Name of the parameter being added
-	 *
-	 * @return New parameter variable
-	 */
-	public JVar param(int mods, JType type, String name) {
-		JVar v = new JVar(JMods.forVar(mods), type, name, null);
-		params.add(v);
-		return v;
-	}
-
-	public JVar param(JType type, String name) {
-		return param(JMod.NONE, type, name);
-	}
-
-	public JVar param(int mods, Class<?> type, String name) {
-		return param(mods, outer.owner()._ref(type), name);
-	}
-
-	public JVar param(Class<?> type, String name) {
-		return param(outer.owner()._ref(type), name);
-	}
-
-	/**
-	 * @see #varParam(JType, String)
-	 */
-	public JVar varParam(Class<?> type, String name) {
-        return varParam(outer.owner()._ref(type),name);
+    public JMethod _throws(Class<? extends Throwable> exception) {
+        return _throws(outer.owner().ref(exception));
     }
 
     /**
-     * Add the specified variable argument to the list of parameters
-     * for this method signature.
+     * Returns the list of variable of this method.
      *
-     * @param type
-     *      Type of the parameter being added.
+     * @return List of parameters of this method. This list is not modifiable.
+     */
+    public List<JVar> params() {
+        return Collections.<JVar>unmodifiableList(params);
+    }
+
+    /**
+     * Add the specified variable to the list of parameters for this method
+     * signature.
      *
-     * @param name
-     *        Name of the parameter being added
+     * @param type JType of the parameter being added
+     *
+     * @param name Name of the parameter being added
+     *
+     * @return New parameter variable
+     */
+    public JVar param(int mods, JType type, String name) {
+        JVar v = new JVar(JMods.forVar(mods), type, name, null);
+        params.add(v);
+        return v;
+    }
+
+    public JVar param(JType type, String name) {
+        return param(JMod.NONE, type, name);
+    }
+
+    public JVar param(int mods, Class<?> type, String name) {
+        return param(mods, outer.owner()._ref(type), name);
+    }
+
+    public JVar param(Class<?> type, String name) {
+        return param(outer.owner()._ref(type), name);
+    }
+
+    /**
+     * @see #varParam(JType, String)
+     */
+    public JVar varParam(Class<?> type, String name) {
+        return varParam(outer.owner()._ref(type), name);
+    }
+
+    /**
+     * Add the specified variable argument to the list of parameters for this
+     * method signature.
+     *
+     * @param type Type of the parameter being added.
+     *
+     * @param name Name of the parameter being added
      *
      * @return the variable parameter
-     * 
-     * @throws IllegalStateException
-     *      If this method is called twice.
-     *      varargs in J2SE 1.5 can appear only once in the 
-     *      method signature.
+     *
+     * @throws IllegalStateException If this method is called twice. varargs in
+     * J2SE 1.5 can appear only once in the method signature.
      */
     public JVar varParam(JType type, String name) {
-		if (!hasVarArgs()) {
+        if (!hasVarArgs()) {
 
-            varParam =
-				new JVar(
-					JMods.forVar(JMod.NONE),
-					type.array(),
-					name,
-					null);
-			return varParam;
-		} else {
-			throw new IllegalStateException(
-				"Cannot have two varargs in a method,\n"
-					+ "Check if varParam method of JMethod is"
-					+ " invoked more than once");
+            varParam
+                    = new JVar(
+                            JMods.forVar(JMod.NONE),
+                            type.array(),
+                            name,
+                            null);
+            return varParam;
+        } else {
+            throw new IllegalStateException(
+                    "Cannot have two varargs in a method,\n"
+                    + "Check if varParam method of JMethod is"
+                    + " invoked more than once");
 
-		}
+        }
 
-	}
+    }
 
     /**
      * Adds an annotation to this variable.
-     * @param clazz
-     *          The annotation class to annotate the field with
+     *
+     * @param clazz The annotation class to annotate the field with
      */
-    public JAnnotationUse annotate(JClass clazz){
-        if(annotations==null)
-           annotations = new ArrayList<JAnnotationUse>();
+    @Override
+    public JAnnotationUse annotate(JClass clazz) {
+        if (annotations == null) {
+            annotations = new ArrayList<>();
+        }
         JAnnotationUse a = new JAnnotationUse(clazz);
         annotations.add(a);
         return a;
@@ -241,38 +228,41 @@
     /**
      * Adds an annotation to this variable.
      *
-     * @param clazz
-     *          The annotation class to annotate the field with
+     * @param clazz The annotation class to annotate the field with
      */
-    public JAnnotationUse annotate(Class <? extends Annotation> clazz){
+    @Override
+    public JAnnotationUse annotate(Class<? extends Annotation> clazz) {
         return annotate(owner().ref(clazz));
     }
 
+    @Override
     public <W extends JAnnotationWriter> W annotate2(Class<W> clazz) {
-        return TypedAnnotationWriter.create(clazz,this);
+        return TypedAnnotationWriter.create(clazz, this);
     }
 
+    @Override
     public boolean removeAnnotation(JAnnotationUse annotation) {
         return this.annotations.remove(annotation);
     }
 
+    @Override
     public Collection<JAnnotationUse> annotations() {
-        if (annotations == null)
-            annotations = new ArrayList<JAnnotationUse>();
+        if (annotations == null) {
+            annotations = new ArrayList<>();
+        }
         return Collections.unmodifiableList(annotations);
     }
 
     /**
-	 * Check if there are any varargs declared
-	 * for this method signature.
-	 */
-	public boolean hasVarArgs() {
-		return this.varParam!=null;
-	}
+     * Check if there are any varargs declared for this method signature.
+     */
+    public boolean hasVarArgs() {
+        return this.varParam != null;
+    }
 
-	public String name() {
-		return name;
-	}
+    public String name() {
+        return name;
+    }
 
     /**
      * Changes the name of the method.
@@ -282,11 +272,11 @@
     }
 
     /**
-	 * Returns the return type.
-	 */
-	public JType type() {
-		return type;
-	}
+     * Returns the return type.
+     */
+    public JType type() {
+        return type;
+    }
 
     /**
      * Overrides the return type.
@@ -296,169 +286,175 @@
     }
 
     /**
-	 * Returns all the parameter types in an array.
-	 * @return
-	 *      If there's no parameter, an empty array will be returned.
-	 */
-	public JType[] listParamTypes() {
-		JType[] r = new JType[params.size()];
-		for (int i = 0; i < r.length; i++)
-			r[i] = params.get(i).type();
-		return r;
-	}
+     * Returns all the parameter types in an array.
+     *
+     * @return If there's no parameter, an empty array will be returned.
+     */
+    public JType[] listParamTypes() {
+        JType[] r = new JType[params.size()];
+        for (int i = 0; i < r.length; i++) {
+            r[i] = params.get(i).type();
+        }
+        return r;
+    }
 
-	/**
-	 * Returns  the varags parameter type.
-	 * @return
-	 * If there's no vararg parameter type, null will be returned.
-	 */
-	public JType listVarParamType() {
-		if (varParam != null)
-			return varParam.type();
-		else
-			return null;
-	}
+    /**
+     * Returns the varags parameter type.
+     *
+     * @return If there's no vararg parameter type, null will be returned.
+     */
+    public JType listVarParamType() {
+        if (varParam != null) {
+            return varParam.type();
+        } else {
+            return null;
+        }
+    }
 
-	/**
-	 * Returns all the parameters in an array.
-	 * @return
-	 *      If there's no parameter, an empty array will be returned.
-	 */
-	public JVar[] listParams() {
-		return params.toArray(new JVar[params.size()]);
-	}
+    /**
+     * Returns all the parameters in an array.
+     *
+     * @return If there's no parameter, an empty array will be returned.
+     */
+    public JVar[] listParams() {
+        return params.toArray(new JVar[params.size()]);
+    }
 
-	/**
-	 * Returns the variable parameter
-	 * @return
-	 *      If there's no parameter, null will be returned.
-	 */
-	public JVar listVarParam() {
-		return varParam;
-	}
+    /**
+     * Returns the variable parameter
+     *
+     * @return If there's no parameter, null will be returned.
+     */
+    public JVar listVarParam() {
+        return varParam;
+    }
 
-	/**
-	 * Returns true if the method has the specified signature.
-	 */
-	public boolean hasSignature(JType[] argTypes) {
-		JVar[] p = listParams();
-		if (p.length != argTypes.length)
-			return false;
+    /**
+     * Returns true if the method has the specified signature.
+     */
+    public boolean hasSignature(JType[] argTypes) {
+        JVar[] p = listParams();
+        if (p.length != argTypes.length) {
+            return false;
+        }
 
-		for (int i = 0; i < p.length; i++)
-			if (!p[i].type().equals(argTypes[i]))
-				return false;
+        for (int i = 0; i < p.length; i++) {
+            if (!p[i].type().equals(argTypes[i])) {
+                return false;
+            }
+        }
 
-		return true;
-	}
+        return true;
+    }
 
-	/**
-	 * Get the block that makes up body of this method
-	 *
-	 * @return Body of method
-	 */
-	public JBlock body() {
-		if (body == null)
-			body = new JBlock();
-		return body;
-	}
-    
+    /**
+     * Get the block that makes up body of this method
+     *
+     * @return Body of method
+     */
+    public JBlock body() {
+        if (body == null) {
+            body = new JBlock();
+        }
+        return body;
+    }
+
     /**
      * Specify the default value for this annotation member
-     * @param value 
-     *           Default value for the annotation member
-     * 
+     *
+     * @param value Default value for the annotation member
+     *
      */
-    public void declareDefaultValue(JExpression value){
+    public void declareDefaultValue(JExpression value) {
         this.defaultValue = value;
     }
 
-	/**
-	 * Creates, if necessary, and returns the class javadoc for this
-	 * JDefinedClass
-	 *
-	 * @return JDocComment containing javadocs for this class
-	 */
-	public JDocComment javadoc() {
-		if (jdoc == null)
-			jdoc = new JDocComment(owner());
-		return jdoc;
-	}
+    /**
+     * Creates, if necessary, and returns the class javadoc for this
+     * JDefinedClass
+     *
+     * @return JDocComment containing javadocs for this class
+     */
+    @Override
+    public JDocComment javadoc() {
+        if (jdoc == null) {
+            jdoc = new JDocComment(owner());
+        }
+        return jdoc;
+    }
 
-	public void declare(JFormatter f) {
-		if (jdoc != null)
-			f.g(jdoc);
+    @Override
+    public void declare(JFormatter f) {
+        if (jdoc != null) {
+            f.g(jdoc);
+        }
 
-        if (annotations != null){
-            for (JAnnotationUse a : annotations)
+        if (annotations != null) {
+            for (JAnnotationUse a : annotations) {
                 f.g(a).nl();
+            }
         }
 
         f.g(mods);
-        
-        // declare the generics parameters
-		super.declare(f);
 
-		if (!isConstructor())
-			f.g(type);
-		f.id(name).p('(').i();
+        // declare the generics parameters
+        super.declare(f);
+
+        if (!isConstructor()) {
+            f.g(type);
+        }
+        f.id(name).p('(').i();
         // when parameters are printed in new lines, we want them to be indented.
         // there's a good chance no newlines happen, too, but just in case it does.
-		boolean first = true;
+        boolean first = true;
         for (JVar var : params) {
-            if (!first)
+            if (!first) {
                 f.p(',');
-            if(var.isAnnotated())
+            }
+            if (var.isAnnotated()) {
                 f.nl();
+            }
             f.b(var);
             first = false;
         }
-		if (hasVarArgs()) {
-			if (!first)
-				f.p(',');
-			f.g(varParam.type().elementType());
-			f.p("... ");
-			f.id(varParam.name());
-		}
+        if (hasVarArgs()) {
+            if (!first) {
+                f.p(',');
+            }
+            f.g(varParam.type().elementType());
+            f.p("... ");
+            f.id(varParam.name());
+        }
 
-		f.o().p(')');
-		if (_throws!=null && !_throws.isEmpty()) {
-			f.nl().i().p("throws").g(_throws).nl().o();
-		}
-        
+        f.o().p(')');
+        if (_throws != null && !_throws.isEmpty()) {
+            f.nl().i().p("throws").g(_throws).nl().o();
+        }
+
         if (defaultValue != null) {
             f.p("default ");
             f.g(defaultValue);
         }
-		if (body != null) {
-			f.s(body);
-		} else if (
-			!outer.isInterface() && !outer.isAnnotationTypeDeclaration() && !mods.isAbstract() && !mods.isNative()) {
-			// Print an empty body for non-native, non-abstract methods
-			f.s(new JBlock());
-		} else {
-			f.p(';').nl();
-		}
-	}
+        if (body != null) {
+            f.s(body);
+        } else if (!outer.isInterface() && !outer.isAnnotationTypeDeclaration() && !mods.isAbstract() && !mods.isNative()) {
+            // Print an empty body for non-native, non-abstract methods
+            f.s(new JBlock());
+        } else {
+            f.p(';').nl();
+        }
+    }
 
     /**
-     * @return
-     *      the current modifiers of this method.
-     *      Always return non-null valid object.
+     * @return the current modifiers of this method. Always return non-null
+     * valid object.
      */
     public JMods mods() {
         return mods;
     }
 
-    /**
-     * @deprecated use {@link #mods()} 
-     */
-    @Deprecated
-    public JMods getMods() {
-		return mods;
-	}
-
-	protected JCodeModel owner() {
-		return outer.owner();
-	}
+    @Override
+    protected JCodeModel owner() {
+        return outer.owner();
+    }
 }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMods.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMods.java
index 851d0c6..47d4d2b 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMods.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JMods.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -120,6 +120,7 @@
         mods = (mods & ~bit) | (newValue ? bit : 0);
     }
 
+    @Override
     public void generate(JFormatter f) {
         if ((mods & JMod.PUBLIC) != 0)        f.p("public");
         if ((mods & JMod.PROTECTED) != 0)     f.p("protected");
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNarrowedClass.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNarrowedClass.java
index 7882314..6a75688 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNarrowedClass.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNarrowedClass.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -47,18 +47,19 @@
 
     @Override
     public JClass narrow( JClass clazz ) {
-        List<JClass> newArgs = new ArrayList<JClass>(args);
+        List<JClass> newArgs = new ArrayList<>(args);
         newArgs.add(clazz);
         return new JNarrowedClass(basis,newArgs);
     }
 
     @Override
     public JClass narrow( JClass... clazz ) {
-        List<JClass> newArgs = new ArrayList<JClass>(args);
+        List<JClass> newArgs = new ArrayList<>(args);
         newArgs.addAll(Arrays.asList(clazz));
         return new JNarrowedClass(basis,newArgs);
     }
 
+    @Override
     public String name() {
         StringBuilder buf = new StringBuilder();
         buf.append(basis.name());
@@ -75,6 +76,7 @@
         return buf.toString();
     }
     
+    @Override
     public String fullName() {
         StringBuilder buf = new StringBuilder();
         buf.append(basis.fullName());
@@ -128,25 +130,31 @@
         f.p("{@code >}");
     }
 
+    @Override
     public JPackage _package() {
         return basis._package();
     }
 
+    @Override
     public JClass _extends() {
         JClass base = basis._extends();
         if(base==null)  return base;
         return base.substituteParams(basis.typeParams(),args);
     }
 
+    @Override
     public Iterator<JClass> _implements() {
         return new Iterator<JClass>() {
             private final Iterator<JClass> core = basis._implements();
+            @Override
             public void remove() {
                 core.remove();
             }
+            @Override
             public JClass next() {
                 return core.next().substituteParams(basis.typeParams(),args);
             }
+            @Override
             public boolean hasNext() {
                 return core.hasNext();
             }
@@ -158,10 +166,12 @@
         return basis;
     }
 
+    @Override
     public boolean isInterface() {
         return basis.isInterface();
     }
 
+    @Override
     public boolean isAbstract() {
         return basis.isAbstract();
     }
@@ -187,11 +197,12 @@
         return fullName().hashCode();
     }
 
+    @Override
     protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
         JClass b = basis.substituteParams(variables,bindings);
         boolean different = b!=basis;
         
-        List<JClass> clazz = new ArrayList<JClass>(args.size());
+        List<JClass> clazz = new ArrayList<>(args.size());
         for( int i=0; i<clazz.size(); i++ ) {
             JClass c = args.get(i).substituteParams(variables,bindings);
             clazz.set(i,c);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNullType.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNullType.java
index ec064b9..c078aac 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNullType.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JNullType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -29,20 +29,28 @@
         super(_owner);
     }
 
+    @Override
     public String name() { return "null"; }
+    @Override
     public String fullName() { return "null"; }
 
+    @Override
     public JPackage _package() { return owner()._package(""); }
 
+    @Override
     public JClass _extends() { return null; }
 
+    @Override
     public Iterator<JClass> _implements() {
         return Collections.<JClass>emptyList().iterator();
     }
 
+    @Override
     public boolean isInterface() { return false; }
+    @Override
     public boolean isAbstract() { return false; }
 
+    @Override
     protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
         return this;
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JOp.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JOp.java
index 787ead9..095ba61 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JOp.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JOp.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -48,6 +48,7 @@
             opFirst = false;
         }
 
+        @Override
         public void generate(JFormatter f) {
             if (opFirst)
                 f.p('(').p(op).g(e).p(')');
@@ -80,6 +81,7 @@
             super(e, op);
         }
 
+        @Override
         public void generate(JFormatter f) {
             if (opFirst)
                 f.p(op).g(e);
@@ -112,6 +114,7 @@
             this.right = right;
         }
 
+        @Override
         public void generate(JFormatter f) {
             f.p('(').g(left).p(op).g(right).p(')');
         }
@@ -225,6 +228,7 @@
             this.e3 = e3;
         }
 
+        @Override
         public void generate(JFormatter f) {
             f.p('(').g(e1).p(op1).g(e2).p(op2).g(e3).p(')');
         }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JPrimitiveType.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JPrimitiveType.java
index f85b3f5..eb27a79 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JPrimitiveType.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JPrimitiveType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -33,21 +33,26 @@
         this.wrapperClass = owner.ref(wrapper);
     }
 
+    @Override
     public JCodeModel owner() { return owner; }
 
+    @Override
     public String fullName() {
         return typeName;
     }
         
+    @Override
     public String name() {
         return fullName();
     }
 
+    @Override
     public boolean isPrimitive() {
         return true;
     }
 
     private JClass arrayClass;
+    @Override
     public JClass array() {
         if(arrayClass==null)
             arrayClass = new JArrayClass(owner,this);
@@ -59,6 +64,7 @@
      * For example, this method returns a reference to java.lang.Integer
      * if this object represents int.
      */
+    @Override
     public JClass boxify() {
         return wrapperClass;
     }
@@ -69,6 +75,7 @@
      * return {@code this}.
      */
     @Deprecated
+    @Override
     public JType unboxify() {
         return this;
     }
@@ -104,6 +111,7 @@
         return exp.invoke(typeName+"Value");
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.p(typeName);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JReturn.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JReturn.java
index 4c43889..ee0cc97 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JReturn.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JReturn.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -31,6 +31,7 @@
        this.expr = expr;
     }
 
+    @Override
     public void state(JFormatter f) {
         f.p("return ");
         if (expr != null) f.g(expr);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JStringLiteral.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JStringLiteral.java
index 8bc607b..2471f2a 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JStringLiteral.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JStringLiteral.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -19,7 +19,6 @@
 public class JStringLiteral extends JExpressionImpl {
 
     public final String str;
-    
 
     JStringLiteral(String what) {
         this.str = what;
@@ -27,7 +26,14 @@
     }
    
     
+    @Override
     public void generate(JFormatter f) {
-    	f.p(JExpr.quotify('"', str));
+        f.p(JExpr.quotify('"', str));
     }
+
+    @Override
+    public String toString() {
+        return str;
+    }
+
 }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JSwitch.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JSwitch.java
index abbe45f..90b0167 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JSwitch.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JSwitch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -27,7 +27,7 @@
     /**
      * vector of JCases.
      */
-    private List<JCase> cases = new ArrayList<JCase>();
+    private List<JCase> cases = new ArrayList<>();
     
     /**
      * a single default case
@@ -59,6 +59,7 @@
         return defaultCase;
     }
     
+    @Override
     public void state(JFormatter f) {
         if (JOp.hasTopOp(test)) {
             f.p("switch ").g(test).p(" {").nl();
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JThrow.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JThrow.java
index c7f9503..911b7d3 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JThrow.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JThrow.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -32,6 +32,7 @@
        this.expr = expr;
     }
 
+    @Override
     public void state(JFormatter f) {
         f.p("throw");
         f.g(expr);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTryBlock.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTryBlock.java
index dfc8ca2..c5d35a7 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTryBlock.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTryBlock.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,7 +21,7 @@
 public class JTryBlock implements JStatement {
 
     private JBlock body = new JBlock();
-    private List<JCatchBlock> catches = new ArrayList<JCatchBlock>();
+    private List<JCatchBlock> catches = new ArrayList<>();
     private JBlock _finally = null;
 
     JTryBlock() {
@@ -42,6 +42,7 @@
         return _finally;
     }
 
+    @Override
     public void state(JFormatter f) {
         f.p("try").g(body);
         for (JCatchBlock cb : catches)
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JType.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JType.java
index 007d44b..04f0c6f 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JType.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -140,6 +140,7 @@
         throw new IllegalArgumentException("Not an array type");
     }
 
+    @Override
     public String toString() {
         return this.getClass().getName()
                 + '(' + fullName() + ')';
@@ -152,6 +153,7 @@
      * This method is used to sort generated import statments in a
      * conventional way for readability.
      */
+    @Override
     public int compareTo(JType o) {
         final String rhs = o.fullName();
         boolean p = fullName().startsWith("java");
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeVar.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeVar.java
index afe02a8..165bf81 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeVar.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeVar.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -31,14 +31,17 @@
         this.name = _name;
     }
     
+    @Override
     public String name() {
         return name;
     }
 
+    @Override
     public String fullName() {
         return name;
     }
 
+    @Override
     public JPackage _package() {
         return null;
     }
@@ -56,11 +59,19 @@
     }
 
     /**
+     * @return bound of this variable
+     */
+    public JClass bound() {
+        return bound;
+    }
+
+    /**
      * Returns the class bound of this variable.
      * 
      * <p>
      * If no bound is given, this method returns {@link Object}.
      */
+    @Override
     public JClass _extends() {
         if(bound!=null)
             return bound;
@@ -71,14 +82,17 @@
     /**
      * Returns the interface bounds of this variable.
      */
+    @Override
     public Iterator<JClass> _implements() {
         return bound._implements();
     }
 
+    @Override
     public boolean isInterface() {
         return false;
     }
 
+    @Override
     public boolean isAbstract() {
         return false;
     }
@@ -86,6 +100,7 @@
     /**
      * Prints out the declaration of the variable.
      */
+    @Override
     public void declare(JFormatter f) {
         f.id(name);
         if(bound!=null)
@@ -93,6 +108,7 @@
     }
 
 
+    @Override
     protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
         for(int i=0;i<variables.length;i++)
             if(variables[i]==this)
@@ -100,6 +116,7 @@
         return this;
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.id(name);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeWildcard.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeWildcard.java
index ab0fed4..4b076d6 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeWildcard.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JTypeWildcard.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -37,14 +37,17 @@
         this.bound = bound;
     }
 
+    @Override
     public String name() {
         return "? extends "+bound.name();
     }
 
+    @Override
     public String fullName() {
         return "? extends "+bound.fullName();
     }
 
+    @Override
     public JPackage _package() {
         return null;
     }
@@ -55,6 +58,7 @@
      * <p>
      * If no bound is given, this method returns {@link Object}.
      */
+    @Override
     public JClass _extends() {
         if(bound!=null)
             return bound;
@@ -65,18 +69,22 @@
     /**
      * Returns the interface bounds of this variable.
      */
+    @Override
     public Iterator<JClass> _implements() {
         return bound._implements();
     }
 
+    @Override
     public boolean isInterface() {
         return false;
     }
 
+    @Override
     public boolean isAbstract() {
         return false;
     }
 
+    @Override
     protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
         JClass nb = bound.substituteParams(variables,bindings);
         if(nb==bound)
@@ -85,6 +93,7 @@
             return new JTypeWildcard(nb);
     }
 
+    @Override
     public void generate(JFormatter f) {
         if(bound._extends()==null)
             f.p("?");   // instead of "? extends Object"
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JVar.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JVar.java
index 7362efc..83a09b9 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JVar.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JVar.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -140,9 +140,10 @@
      * @param clazz
      *          The annotation class to annotate the field with
      */
+    @Override
     public JAnnotationUse annotate(JClass clazz){
         if(annotations==null)
-           annotations = new ArrayList<JAnnotationUse>();
+           annotations = new ArrayList<>();
         JAnnotationUse a = new JAnnotationUse(clazz);
         annotations.add(a);
         return a;
@@ -154,21 +155,25 @@
      * @param clazz
      *          The annotation class to annotate the field with
      */
+    @Override
     public JAnnotationUse annotate(Class <? extends Annotation> clazz){
         return annotate(type.owner().ref(clazz));
     }
 
+    @Override
     public <W extends JAnnotationWriter> W annotate2(Class<W> clazz) {
         return TypedAnnotationWriter.create(clazz,this);
     }
 
+    @Override
     public boolean removeAnnotation(JAnnotationUse annotation) {
         return this.annotations.remove(annotation);
     }
 
+    @Override
     public Collection<JAnnotationUse> annotations() {
         if (annotations == null)
-            annotations = new ArrayList<JAnnotationUse>();
+            annotations = new ArrayList<>();
         return Collections.unmodifiableList(annotations);
     }
 
@@ -186,18 +191,22 @@
             f.p('=').g(init);
     }
 
+    @Override
     public void declare(JFormatter f) {
         f.b(this).p(';').nl();
     }
 
+    @Override
     public void generate(JFormatter f) {
         f.id(name);
     }
 
 	
+    @Override
     public JExpression assign(JExpression rhs) {
 		return JExpr.assign(this,rhs);
     }
+    @Override
     public JExpression assignPlus(JExpression rhs) {
 		return JExpr.assignPlus(this,rhs);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JWhileLoop.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JWhileLoop.java
index 0f1510c..fcec7fd 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JWhileLoop.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/JWhileLoop.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -43,6 +43,7 @@
         return body;
     }
 
+    @Override
     public void state(JFormatter f) {
         if (JOp.hasTopOp(test)) {
             f.p("while ").g(test);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/SecureLoader.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/SecureLoader.java
index dc3fc9e..1d60c82 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/SecureLoader.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/SecureLoader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -24,6 +24,7 @@
         } else {
             return (ClassLoader) java.security.AccessController.doPrivileged(
                     new java.security.PrivilegedAction() {
+                        @Override
                         public java.lang.Object run() {
                             return Thread.currentThread().getContextClassLoader();
                         }
@@ -37,6 +38,7 @@
         } else {
             return (ClassLoader) java.security.AccessController.doPrivileged(
                     new java.security.PrivilegedAction() {
+                        @Override
                         public java.lang.Object run() {
                             return c.getClassLoader();
                         }
@@ -50,6 +52,7 @@
         } else {
             return (ClassLoader) java.security.AccessController.doPrivileged(
                     new java.security.PrivilegedAction() {
+                        @Override
                         public java.lang.Object run() {
                             return ClassLoader.getSystemClassLoader();
                         }
@@ -63,6 +66,7 @@
         } else {
             java.security.AccessController.doPrivileged(
                     new java.security.PrivilegedAction() {
+                        @Override
                         public java.lang.Object run() {
                             Thread.currentThread().setContextClassLoader(cl);
                             return null;
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/TypedAnnotationWriter.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/TypedAnnotationWriter.java
index e9e76ef..59d34a5 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/TypedAnnotationWriter.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/TypedAnnotationWriter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -54,15 +54,18 @@
         this.use = use;
     }
 
+    @Override
     public JAnnotationUse getAnnotationUse() {
         return use;
     }
 
+    @Override
     public Class<A> getAnnotationType() {
         return annotation;
     }
 
     @SuppressWarnings("unchecked")
+    @Override
 	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 
         if(method.getDeclaringClass()==JAnnotationWriter.class) {
@@ -141,7 +144,7 @@
     @SuppressWarnings("unchecked")
 	private Object addArrayValue(Object proxy,String name, Class itemType, Class expectedReturnType, Object arg) {
         if(arrays==null)
-            arrays = new HashMap<String,JAnnotationArrayMember>();
+            arrays = new HashMap<>();
         JAnnotationArrayMember m = arrays.get(name);
         if(m==null) {
             m = use.paramArray(name);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JBinaryFile.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JBinaryFile.java
index f9f5b5c..f4a1534 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JBinaryFile.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JBinaryFile.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -41,6 +41,7 @@
         return baos;
     }
     
+    @Override
     public void build(OutputStream os) throws IOException {
         os.write( baos.toByteArray() );
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JPropertyFile.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JPropertyFile.java
index 8cdd521..117c1d4 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JPropertyFile.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JPropertyFile.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -40,6 +40,7 @@
     // TODO: should we rather expose Properties object directly via
     // public Properties body() { return data; } ?
     
+    @Override
     public void build( OutputStream out ) throws IOException {
         data.store(out,null);
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JSerializedObject.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JSerializedObject.java
index d9259b1..1f77c24 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JSerializedObject.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JSerializedObject.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -37,6 +37,7 @@
     /**
      * called by JPackage to serialize the object 
      */
+    @Override
     protected void build( OutputStream os ) throws IOException {
         // serialize the obj into a ByteArrayOutputStream
         ObjectOutputStream oos = new ObjectOutputStream(os);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticFile.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticFile.java
index d1ba3f9..61849d4 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticFile.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticFile.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -47,10 +47,12 @@
         this.isResource = isResource;
     }
 
+    @Override
     protected boolean isResource() {
         return isResource;
     }
 
+    @Override
     protected void build(OutputStream os) throws IOException {
         DataInputStream dis = new DataInputStream(classLoader.getResourceAsStream(resourceName));
         
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticJavaFile.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticJavaFile.java
index 5ac33ec..45e35b6 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticJavaFile.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JStaticJavaFile.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -74,10 +74,12 @@
         return clazz;
     }
 
+    @Override
     protected boolean isResource() {
         return false;
     }
 
+    @Override
     protected  void build(OutputStream os) throws IOException {
         int lineNumber=1;
         try (
@@ -107,6 +109,7 @@
     private LineFilter createLineFilter() {
         // this filter replaces the package declaration.
         LineFilter f = new LineFilter() {
+            @Override
             public String process(String line) {
                 if(!line.startsWith("package ")) return line;
 
@@ -154,6 +157,7 @@
             this.first=first;
             this.second=second;
         }
+        @Override
         public String process(String line) throws ParseException {
             line = first.process(line);
             if(line==null)  return null;
@@ -172,10 +176,12 @@
             typeParams = new JTypeVar[0];
         }
 
+        @Override
         public String name() {
             return className;
         }
 
+        @Override
         public String fullName() {
             if(pkg.isUnnamed())
                 return className;
@@ -183,30 +189,37 @@
                 return pkg.name()+'.'+className;
         }
 
+        @Override
         public JPackage _package() {
             return pkg;
         }
 
+        @Override
         public JClass _extends() {
             throw new UnsupportedOperationException();
         }
 
+        @Override
         public Iterator<JClass> _implements() {
             throw new UnsupportedOperationException();
         }
 
+        @Override
         public boolean isInterface() {
             throw new UnsupportedOperationException();
         }
 
+        @Override
         public boolean isAbstract() {
             throw new UnsupportedOperationException();
         }
 
+        @Override
         public JTypeVar[] typeParams() {
             return typeParams;
         }
 
+        @Override
         protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings) {
             return this;
         }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JTextFile.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JTextFile.java
index bf60f38..c614b27 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JTextFile.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/fmt/JTextFile.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -36,6 +36,7 @@
         this.contents = _contents;
     }
     
+    @Override
     public void build( OutputStream out ) throws IOException {
         Writer w = new OutputStreamWriter(out);
         w.write(contents);
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/ClassNameComparator.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/ClassNameComparator.java
index 825b94e..0371c86 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/ClassNameComparator.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/ClassNameComparator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -23,6 +23,7 @@
 public class ClassNameComparator implements Comparator<JClass> {
     private ClassNameComparator() {}
     
+    @Override
     public int compare(JClass l, JClass r) {
         return l.fullName().compareTo(r.fullName());
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/JavadocEscapeWriter.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/JavadocEscapeWriter.java
index 4486ec9..3da21dd 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/JavadocEscapeWriter.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/JavadocEscapeWriter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -40,6 +40,7 @@
         super(next);
     }
 
+    @Override
     public void write(int ch) throws IOException {
         if(ch=='<')
             out.write("&lt;");
@@ -53,19 +54,23 @@
             out.write(ch);
     }
 
+    @Override
     public void write(char[] buf, int off, int len) throws IOException {
         for( int i=0; i<len; i++ )
             write(buf[off+i]);
     }
 
+    @Override
     public void write(char[] buf) throws IOException {
         write(buf,0,buf.length);
     }
 
+    @Override
     public void write(String buf, int off, int len) throws IOException {
         write( buf.toCharArray(), off, len );
     }
 
+    @Override
     public void write(String buf) throws IOException {
         write( buf.toCharArray(), 0, buf.length() );
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/UnicodeEscapeWriter.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/UnicodeEscapeWriter.java
index a407891..642f04a 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/UnicodeEscapeWriter.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/util/UnicodeEscapeWriter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -30,6 +30,7 @@
         super(next);
     }
 
+    @Override
     public final void write(int ch) throws IOException {
         if(!requireEscaping(ch))  out.write(ch);
         else {
@@ -55,19 +56,23 @@
         return false;
     }
     
+    @Override
     public final void write(char[] buf, int off, int len) throws IOException {
         for( int i=0; i<len; i++ )
             write(buf[off+i]);
     }
 
+    @Override
     public final void write(char[] buf) throws IOException {
         write(buf,0,buf.length);
     }
 
+    @Override
     public final void write(String buf, int off, int len) throws IOException {
         write( buf.toCharArray(), off, len );
     }
     
+    @Override
     public final void write(String buf) throws IOException {
         write( buf.toCharArray(), 0, buf.length() );
     }
diff --git a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/writer/OutputStreamCodeWriter.java b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/writer/OutputStreamCodeWriter.java
index b666997..d6bcb23 100644
--- a/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/writer/OutputStreamCodeWriter.java
+++ b/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/writer/OutputStreamCodeWriter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -43,15 +43,18 @@
 		this.encoding = encoding;
 	}
 
+        @Override
 	public OutputStream openBinary(JPackage pkg, String fileName)
 			throws IOException {
 		return new FilterOutputStream(out) {
+                @Override
 			public void close() {
 				// don't let this stream close
 			}
 		};
 	}
 
+        @Override
 	public void close() throws IOException {
 		out.close();
 	}
diff --git a/jaxb-ri/runtime/impl/src/main/java/module-info.java b/jaxb-ri/runtime/impl/src/main/java/module-info.java
index 4bf95da..f845343 100644
--- a/jaxb-ri/runtime/impl/src/main/java/module-info.java
+++ b/jaxb-ri/runtime/impl/src/main/java/module-info.java
@@ -35,6 +35,7 @@
     exports org.glassfish.jaxb.runtime.v2.model.impl;
     exports org.glassfish.jaxb.runtime.v2.model.runtime;
     exports org.glassfish.jaxb.runtime.v2.runtime;
+    exports org.glassfish.jaxb.runtime.v2.runtime.reflect;
     exports org.glassfish.jaxb.runtime.v2.runtime.unmarshaller;
     exports org.glassfish.jaxb.runtime.v2.schemagen;
     exports org.glassfish.jaxb.runtime.v2.schemagen.xmlschema;
diff --git a/jaxb-ri/xjc/src/main/java/com/sun/tools/xjc/addon/sync/SynchronizedMethodAddOn.java b/jaxb-ri/xjc/src/main/java/com/sun/tools/xjc/addon/sync/SynchronizedMethodAddOn.java
index 6321a95..ce5d94b 100644
--- a/jaxb-ri/xjc/src/main/java/com/sun/tools/xjc/addon/sync/SynchronizedMethodAddOn.java
+++ b/jaxb-ri/xjc/src/main/java/com/sun/tools/xjc/addon/sync/SynchronizedMethodAddOn.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -54,7 +54,7 @@
      */
     private void augument(ClassOutline co) {
         for (JMethod m : co.implClass.methods())
-            m.getMods().setSynchronized(true);
+            m.mods().setSynchronized(true);
     }
 
 }