You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2022/11/28 20:06:00 UTC

[tomcat] branch 10.1.x updated (60718deae7 -> bb25a64488)

This is an automated email from the ASF dual-hosted git repository.

markt pushed a change to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


    from 60718deae7 Fix license comment indent
     new 92628fe734 Update to Commond BCEL 6.7.0-RC1
     new bb25a64488 Fix comment formatting - remove unintended use of back ticks

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 MERGE.txt                                          |   2 +-
 .../catalina/valves/rewrite/RewriteRule.java       |   6 +-
 java/org/apache/tomcat/jni/SSLContext.java         |   2 +-
 java/org/apache/tomcat/util/bcel/Const.java        | 214 ++++++++++++---------
 .../bcel/classfile/AnnotationElementValue.java     |  45 ++---
 .../util/bcel/classfile/AnnotationEntry.java       |  45 +++--
 .../tomcat/util/bcel/classfile/Annotations.java    |  33 ++--
 .../util/bcel/classfile/ArrayElementValue.java     |  44 ++---
 .../util/bcel/classfile/ClassElementValue.java     |  35 ++--
 .../util/bcel/classfile/ClassFormatException.java  |  64 ++++--
 .../tomcat/util/bcel/classfile/ClassParser.java    | 137 +++++++------
 .../tomcat/util/bcel/classfile/Constant.java       | 136 +++++++------
 .../tomcat/util/bcel/classfile/ConstantClass.java  |  28 ++-
 .../tomcat/util/bcel/classfile/ConstantDouble.java |  31 ++-
 .../tomcat/util/bcel/classfile/ConstantFloat.java  |  31 ++-
 .../util/bcel/classfile/ConstantInteger.java       |  31 ++-
 .../tomcat/util/bcel/classfile/ConstantLong.java   |  37 ++--
 .../tomcat/util/bcel/classfile/ConstantPool.java   | 145 +++++++++-----
 .../tomcat/util/bcel/classfile/ConstantUtf8.java   |  58 +++---
 .../tomcat/util/bcel/classfile/ElementValue.java   | 194 ++++++++++++-------
 .../util/bcel/classfile/ElementValuePair.java      |  37 ++--
 .../util/bcel/classfile/EnumElementValue.java      |  38 ++--
 .../tomcat/util/bcel/classfile/JavaClass.java      |  72 ++++---
 .../util/bcel/classfile/SimpleElementValue.java    |  70 +++----
 .../apache/tomcat/util/bcel/classfile/Utility.java |  32 +--
 webapps/docs/changelog.xml                         |   4 +
 26 files changed, 837 insertions(+), 734 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


[tomcat] 01/02: Update to Commond BCEL 6.7.0-RC1

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 92628fe734efe7c6e02dc5d2761d9b6a74cb2f9e
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Nov 28 10:39:39 2022 +0000

    Update to Commond BCEL 6.7.0-RC1
---
 MERGE.txt                                          |   2 +-
 java/org/apache/tomcat/util/bcel/Const.java        | 214 ++++++++++++---------
 .../bcel/classfile/AnnotationElementValue.java     |  45 ++---
 .../util/bcel/classfile/AnnotationEntry.java       |  45 +++--
 .../tomcat/util/bcel/classfile/Annotations.java    |  33 ++--
 .../util/bcel/classfile/ArrayElementValue.java     |  44 ++---
 .../util/bcel/classfile/ClassElementValue.java     |  35 ++--
 .../util/bcel/classfile/ClassFormatException.java  |  64 ++++--
 .../tomcat/util/bcel/classfile/ClassParser.java    | 137 +++++++------
 .../tomcat/util/bcel/classfile/Constant.java       | 136 +++++++------
 .../tomcat/util/bcel/classfile/ConstantClass.java  |  28 ++-
 .../tomcat/util/bcel/classfile/ConstantDouble.java |  31 ++-
 .../tomcat/util/bcel/classfile/ConstantFloat.java  |  31 ++-
 .../util/bcel/classfile/ConstantInteger.java       |  31 ++-
 .../tomcat/util/bcel/classfile/ConstantLong.java   |  37 ++--
 .../tomcat/util/bcel/classfile/ConstantPool.java   | 145 +++++++++-----
 .../tomcat/util/bcel/classfile/ConstantUtf8.java   |  58 +++---
 .../tomcat/util/bcel/classfile/ElementValue.java   | 194 ++++++++++++-------
 .../util/bcel/classfile/ElementValuePair.java      |  37 ++--
 .../util/bcel/classfile/EnumElementValue.java      |  38 ++--
 .../tomcat/util/bcel/classfile/JavaClass.java      |  72 ++++---
 .../util/bcel/classfile/SimpleElementValue.java    |  70 +++----
 .../apache/tomcat/util/bcel/classfile/Utility.java |  32 +--
 webapps/docs/changelog.xml                         |   4 +
 24 files changed, 833 insertions(+), 730 deletions(-)

diff --git a/MERGE.txt b/MERGE.txt
index 61720d0da7..a50c237c4f 100644
--- a/MERGE.txt
+++ b/MERGE.txt
@@ -37,7 +37,7 @@ Unused code is removed
 Sub-tree:
 src/main/java/org/apache/bcel
 The SHA1 ID / tag for the most recent commit to be merged to Tomcat is:
-40d5eb4eda290c74b533f389fbc4e3495a4513f6 (2021-09-01)
+b015e90257850e810e57d1244664300f50de4a4c (2022-11-28)
 
 Codec
 -----
diff --git a/java/org/apache/tomcat/util/bcel/Const.java b/java/org/apache/tomcat/util/bcel/Const.java
index ad19386963..301ace69dc 100644
--- a/java/org/apache/tomcat/util/bcel/Const.java
+++ b/java/org/apache/tomcat/util/bcel/Const.java
@@ -6,14 +6,13 @@
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel;
 
@@ -22,169 +21,212 @@ package org.apache.tomcat.util.bcel;
  */
 public final class Const {
 
-    /** One of the access flags for fields, methods, or classes.
-     *  @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.1-200-E.1">
-     *  Flag definitions for Classes in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
-     *  @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.5">
-     *  Flag definitions for Fields in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
-     *  @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.6">
-     *  Flag definitions for Methods in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
-     *  @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.7.6-300-D.1-D.1">
-     *  Flag definitions for Inner Classes in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
+    /**
+     * Java class file format Magic number (0xCAFEBABE)
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.1-200-A"> The ClassFile Structure
+     *      in The Java Virtual Machine Specification</a>
+     */
+    public static final int JVM_CLASSFILE_MAGIC = 0xCAFEBABE;
+
+    /**
+     * One of the access flags for fields, methods, or classes.
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.1-200-E.1"> Flag definitions for
+     *      Classes in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.5"> Flag definitions for Fields
+     *      in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.6"> Flag definitions for Methods
+     *      in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.7.6-300-D.1-D.1"> Flag
+     *      definitions for Inner Classes in the Java Virtual Machine Specification (Java SE 9 Edition).</a>
      */
     public static final short ACC_FINAL      = 0x0010;
 
-    /** One of the access flags for fields, methods, or classes.
+    /**
+     * One of the access flags for fields, methods, or classes.
+     *
+     * @see #ACC_FINAL
      */
     public static final short ACC_INTERFACE    = 0x0200;
 
-    /** One of the access flags for fields, methods, or classes.
+    /**
+     * One of the access flags for fields, methods, or classes.
+     *
+     * @see #ACC_FINAL
      */
     public static final short ACC_ABSTRACT     = 0x0400;
 
-    /** One of the access flags for fields, methods, or classes.
+    /**
+     * One of the access flags for fields, methods, or classes.
+     *
+     * @see #ACC_FINAL
      */
     public static final short ACC_ANNOTATION   = 0x2000;
 
     /**
      * Marks a constant pool entry as type UTF-8.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.7">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.7"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
+     */
+    public static final byte CONSTANT_Utf8 = 1;
+
+    /*
+     * The description of the constant pool is at: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4
+     * References below are to the individual sections
      */
-    public static final byte CONSTANT_Utf8               = 1;
 
     /**
      * Marks a constant pool entry as type Integer.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.4">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.4"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Integer            = 3;
+    public static final byte CONSTANT_Integer = 3;
 
     /**
      * Marks a constant pool entry as type Float.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.4">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.4"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Float              = 4;
+    public static final byte CONSTANT_Float = 4;
 
     /**
      * Marks a constant pool entry as type Long.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.5">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.5"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Long               = 5;
+    public static final byte CONSTANT_Long = 5;
 
     /**
      * Marks a constant pool entry as type Double.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.5">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.5"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Double             = 6;
+    public static final byte CONSTANT_Double = 6;
 
     /**
      * Marks a constant pool entry as a Class
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.1">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.1"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Class              = 7;
+    public static final byte CONSTANT_Class = 7;
 
     /**
-     * Marks a constant pool entry as type String
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.3">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     * Marks a constant pool entry as a Field Reference.
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.2"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_String             = 8;
+    public static final byte CONSTANT_Fieldref = 9;
 
     /**
-     * Marks a constant pool entry as a Field Reference.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.2">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     * Marks a constant pool entry as type String
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.3"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Fieldref           = 9;
+    public static final byte CONSTANT_String = 8;
 
     /**
      * Marks a constant pool entry as a Method Reference.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.2">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.2"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Methodref          = 10;
+    public static final byte CONSTANT_Methodref = 10;
 
     /**
      * Marks a constant pool entry as an Interface Method Reference.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.2">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.2"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
     public static final byte CONSTANT_InterfaceMethodref = 11;
 
     /**
      * Marks a constant pool entry as a name and type.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.6">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.6"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_NameAndType        = 12;
+    public static final byte CONSTANT_NameAndType = 12;
 
     /**
      * Marks a constant pool entry as a Method Handle.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.8">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.8"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_MethodHandle       = 15;
+    public static final byte CONSTANT_MethodHandle = 15;
 
     /**
      * Marks a constant pool entry as a Method Type.
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.9">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.9"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_MethodType         = 16;
+    public static final byte CONSTANT_MethodType = 16;
 
     /**
      * Marks a constant pool entry as dynamically computed.
-     * @see  <a href="https://bugs.openjdk.java.net/secure/attachment/74618/constant-dynamic.html">
-     * Change request for JEP 309</a>
+     *
+     * @see <a href="https://bugs.openjdk.java.net/secure/attachment/74618/constant-dynamic.html"> Change request for JEP
+     *      309</a>
      */
-    public static final byte CONSTANT_Dynamic            = 17;
+    public static final byte CONSTANT_Dynamic = 17;
 
     /**
      * Marks a constant pool entry as an Invoke Dynamic
-     * @see  <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.10">
-     * The Constant Pool in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.10"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_InvokeDynamic      = 18;
+    public static final byte CONSTANT_InvokeDynamic = 18;
 
     /**
      * Marks a constant pool entry as a Module Reference.
      *
-     * <p>Note: Early access Java 9 support- currently subject to change</p>
-     *
-     * @see <a href="https://cr.openjdk.java.net/~mr/jigsaw/spec/lang-vm.html#jigsaw-2.6">
-     * JPMS: Modules in the Java Language and JVM</a>
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.4.11"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
      */
-    public static final byte CONSTANT_Module             = 19;
+    public static final byte CONSTANT_Module = 19;
 
     /**
      * Marks a constant pool entry as a Package Reference.
      *
-     * <p>Note: Early access Java 9 support- currently subject to change</p>
-     *
-     * @see <a href="https://cr.openjdk.java.net/~mr/jigsaw/spec/lang-vm.html#jigsaw-2.6">
-     * JPMS: Modules in the Java Language and JVM</a>
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.4.12"> The Constant Pool in The
+     *      Java Virtual Machine Specification</a>
+     */
+    public static final byte CONSTANT_Package = 20;
+
+    /**
+     * The names of the types of entries in a constant pool. Use getConstantName instead
      */
-    public static final byte CONSTANT_Package            = 20;
+    private static final String[] CONSTANT_NAMES = {"", "CONSTANT_Utf8", "", "CONSTANT_Integer", "CONSTANT_Float", "CONSTANT_Long", "CONSTANT_Double",
+            "CONSTANT_Class", "CONSTANT_String", "CONSTANT_Fieldref", "CONSTANT_Methodref", "CONSTANT_InterfaceMethodref", "CONSTANT_NameAndType", "", "",
+            "CONSTANT_MethodHandle", "CONSTANT_MethodType", "CONSTANT_Dynamic", "CONSTANT_InvokeDynamic", "CONSTANT_Module", "CONSTANT_Package"};
 
     /**
-     * The names of the types of entries in a constant pool.
-     * Use getConstantName instead
+     * The maximum number of dimensions in an array ({@value}). One of the limitations of the Java Virtual Machine.
+     *
+     * @see <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.2-150"> Field Descriptors in
+     *      The Java Virtual Machine Specification</a>
      */
-    private static final String[] CONSTANT_NAMES = {
-    "", "CONSTANT_Utf8", "", "CONSTANT_Integer",
-    "CONSTANT_Float", "CONSTANT_Long", "CONSTANT_Double",
-    "CONSTANT_Class", "CONSTANT_String", "CONSTANT_Fieldref",
-    "CONSTANT_Methodref", "CONSTANT_InterfaceMethodref",
-    "CONSTANT_NameAndType", "", "", "CONSTANT_MethodHandle",
-    "CONSTANT_MethodType", "CONSTANT_Dynamic", "CONSTANT_InvokeDynamic",
-    "CONSTANT_Module", "CONSTANT_Package"};
+    public static final int MAX_ARRAY_DIMENSIONS = 255;
 
-    public static String getConstantName(int index) {
+    /**
+     * Get the CONSTANT_NAMES entry at the given index.
+     *
+     * @param index The index for which the constant name is required
+     * @return the CONSTANT_NAMES entry at the given index
+     */
+    public static String getConstantName(final int index) {
         return CONSTANT_NAMES[index];
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/AnnotationElementValue.java b/java/org/apache/tomcat/util/bcel/classfile/AnnotationElementValue.java
index 3c43a5774b..db09a573d6 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/AnnotationElementValue.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/AnnotationElementValue.java
@@ -1,46 +1,39 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
-public class AnnotationElementValue extends ElementValue
-{
+public class AnnotationElementValue extends ElementValue {
     // For annotation element values, this is the annotation
     private final AnnotationEntry annotationEntry;
 
-    AnnotationElementValue(final int type, final AnnotationEntry annotationEntry,
-            final ConstantPool cpool)
-    {
+    AnnotationElementValue(final int type, final AnnotationEntry annotationEntry, final ConstantPool cpool) {
         super(type, cpool);
         if (type != ANNOTATION) {
-            throw new IllegalArgumentException(
-                    "Only element values of type annotation can be built with this ctor - type specified: " + type);
+            throw new ClassFormatException("Only element values of type annotation can be built with this ctor - type specified: " + type);
         }
         this.annotationEntry = annotationEntry;
     }
 
-    @Override
-    public String stringifyValue()
-    {
-        return annotationEntry.toString();
+    public AnnotationEntry getAnnotationEntry() {
+        return annotationEntry;
     }
 
-    public AnnotationEntry getAnnotationEntry()
-    {
-        return annotationEntry;
+    @Override
+    public String stringifyValue() {
+        return annotationEntry.toString();
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java b/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java
index f4fb7e97a2..52e6a6206b 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -22,17 +21,18 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.tomcat.util.bcel.Const;
-
 /**
- * represents one annotation in the annotation table
+ * Represents one annotation in the annotation table
  */
 public class AnnotationEntry {
 
+    static final AnnotationEntry[] EMPTY_ARRAY = {};
+
     private final int typeIndex;
+
     private final ConstantPool constantPool;
 
-    private final List<ElementValuePair> element_value_pairs;
+    private final List<ElementValuePair> elementValuePairs;
 
     /*
      * Creates an AnnotationEntry from a DataInputStream
@@ -46,11 +46,11 @@ public class AnnotationEntry {
         this.constantPool = constantPool;
 
         typeIndex = input.readUnsignedShort();
-        final int num_element_value_pairs = input.readUnsignedShort();
+        final int numElementValuePairs = input.readUnsignedShort();
 
-        element_value_pairs = new ArrayList<>(num_element_value_pairs);
-        for (int i = 0; i < num_element_value_pairs; i++) {
-            element_value_pairs.add(new ElementValuePair(input, constantPool));
+        elementValuePairs = new ArrayList<>(numElementValuePairs);
+        for (int i = 0; i < numElementValuePairs; i++) {
+            elementValuePairs.add(new ElementValuePair(input, constantPool));
         }
     }
 
@@ -58,14 +58,13 @@ public class AnnotationEntry {
      * @return the annotation type name
      */
     public String getAnnotationType() {
-        final ConstantUtf8 c = (ConstantUtf8) constantPool.getConstant(typeIndex, Const.CONSTANT_Utf8);
-        return c.getBytes();
+        return constantPool.getConstantUtf8(typeIndex).getBytes();
     }
 
     /**
      * @return the element value pairs in this annotation entry
      */
     public List<ElementValuePair> getElementValuePairs() {
-        return element_value_pairs;
+        return elementValuePairs;
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/Annotations.java b/java/org/apache/tomcat/util/bcel/classfile/Annotations.java
index 60cb253a44..c7d197f841 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/Annotations.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/Annotations.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -25,6 +24,8 @@ import java.io.IOException;
  */
 public class Annotations {
 
+    static final Annotations[] EMPTY_ARRAY = {};
+
     private final AnnotationEntry[] annotationTable;
 
     /**
@@ -32,15 +33,17 @@ public class Annotations {
      * @param constantPool Array of constants
      */
     Annotations(final DataInput input, final ConstantPool constantPool) throws IOException {
-        final int annotation_table_length = input.readUnsignedShort();
-        annotationTable = new AnnotationEntry[annotation_table_length];
-        for (int i = 0; i < annotation_table_length; i++) {
+        final int annotationTableLength = input.readUnsignedShort();
+        annotationTable = new AnnotationEntry[annotationTableLength];
+        for (int i = 0; i < annotationTableLength; i++) {
             annotationTable[i] = new AnnotationEntry(input, constantPool);
         }
     }
 
 
     /**
+     * Gets the array of annotation entries in this annotation
+     *
      * @return the array of annotation entries in this annotation
      */
     public AnnotationEntry[] getAnnotationEntries() {
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ArrayElementValue.java b/java/org/apache/tomcat/util/bcel/classfile/ArrayElementValue.java
index 8377707d27..48a3644729 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ArrayElementValue.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ArrayElementValue.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -22,23 +21,23 @@ public class ArrayElementValue extends ElementValue
     // For array types, this is the array
     private final ElementValue[] elementValues;
 
-    ArrayElementValue(final int type, final ElementValue[] datums, final ConstantPool cpool)
-    {
+    ArrayElementValue(final int type, final ElementValue[] datums, final ConstantPool cpool) {
         super(type, cpool);
         if (type != ARRAY) {
-            throw new IllegalArgumentException(
-                    "Only element values of type array can be built with this ctor - type specified: " + type);
+            throw new ClassFormatException("Only element values of type array can be built with this ctor - type specified: " + type);
         }
         this.elementValues = datums;
     }
 
+    public ElementValue[] getElementValuesArray() {
+        return elementValues;
+    }
+
     @Override
-    public String stringifyValue()
-    {
+    public String stringifyValue() {
         final StringBuilder sb = new StringBuilder();
         sb.append('[');
-        for (int i = 0; i < elementValues.length; i++)
-        {
+        for (int i = 0; i < elementValues.length; i++) {
             sb.append(elementValues[i].stringifyValue());
             if (i + 1 < elementValues.length) {
                 sb.append(',');
@@ -47,9 +46,4 @@ public class ArrayElementValue extends ElementValue
         sb.append(']');
         return sb.toString();
     }
-
-    public ElementValue[] getElementValuesArray()
-    {
-        return elementValues;
-    }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ClassElementValue.java b/java/org/apache/tomcat/util/bcel/classfile/ClassElementValue.java
index 10fa589f7a..0c6b21abbc 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ClassElementValue.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ClassElementValue.java
@@ -1,26 +1,22 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
-import org.apache.tomcat.util.bcel.Const;
-
-public class ClassElementValue extends ElementValue
-{
+public class ClassElementValue extends ElementValue {
     // For primitive types and string type, this points to the value entry in
     // the cpool
     // For 'class' this points to the class entry in the cpool
@@ -33,10 +29,7 @@ public class ClassElementValue extends ElementValue
 
 
     @Override
-    public String stringifyValue()
-    {
-        final ConstantUtf8 cu8 = (ConstantUtf8) super.getConstantPool().getConstant(idx,
-                Const.CONSTANT_Utf8);
-        return cu8.getBytes();
+    public String stringifyValue() {
+        return super.getConstantPool().getConstantUtf8(idx).getBytes();
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ClassFormatException.java b/java/org/apache/tomcat/util/bcel/classfile/ClassFormatException.java
index f841735361..1701ae6345 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ClassFormatException.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ClassFormatException.java
@@ -1,36 +1,66 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
 /**
- * Thrown when the BCEL attempts to read a class file and determines
- * that the file is malformed or otherwise cannot be interpreted as a
- * class file.
+ * Thrown when the BCEL attempts to read a class file and determines that a class is malformed or otherwise cannot be interpreted as a class file.
  */
 public class ClassFormatException extends RuntimeException {
 
     private static final long serialVersionUID = 3243149520175287759L;
 
+    /**
+     * Constructs a new instance with {@code null} as its detail message. The cause is not initialized, and may subsequently be initialized by a call to
+     * {@link #initCause}.
+     */
     public ClassFormatException() {
     }
 
+    /**
+     * Constructs a new instance with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to
+     * {@link #initCause}.
+     *
+     * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
+     */
+    public ClassFormatException(final String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs a new instance with the specified detail message and cause.
+     * <p>
+     * Note that the detail message associated with {@code cause} is <i>not</i> automatically incorporated in this runtime exception's detail message.
+     *
+     * @param message the detail message (which is saved for later retrieval by the {@link #getMessage()} method).
+     * @param cause   the cause (which is saved for later retrieval by the {@link #getCause()} method). (A {@code null} value is permitted, and indicates that
+     *                the cause is nonexistent or unknown.)
+     */
+    public ClassFormatException(final String message, final Throwable cause) {
+        super(message, cause);
+    }
 
-    public ClassFormatException(final String s) {
-        super(s);
+    /**
+     * Constructs a new instance with the specified cause and a detail message of {@code (cause==null ? null : cause.toString())} (which typically contains the
+     * class and detail message of {@code cause}). This constructor is useful for runtime exceptions that are little more than wrappers for other throwables.
+     *
+     * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). (A {@code null} value is permitted, and indicates that the
+     *              cause is nonexistent or unknown.)
+     */
+    public ClassFormatException(final Throwable cause) {
+        super(cause);
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java b/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java
index 90fb145428..8783fe9233 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -28,31 +27,27 @@ import java.util.List;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * Wrapper class that parses a given Java .class file. The method <A
- * href ="#parse">parse</A> returns a <A href ="JavaClass.html">
- * JavaClass</A> object on success. When an I/O error or an
- * inconsistency occurs an appropriate exception is propagated back to
- * the caller.
+ * Wrapper class that parses a given Java .class file. The method <a href ="#parse">parse</a> returns a
+ * <a href ="JavaClass.html"> JavaClass</a> object on success. When an I/O error or an inconsistency occurs an
+ * appropriate exception is propagated back to the caller.
  *
- * The structure and the names comply, except for a few conveniences,
- * exactly with the <A href="http://docs.oracle.com/javase/specs/">
- * JVM specification 1.0</a>. See this paper for
- * further details about the structure of a bytecode file.
+ * The structure and the names comply, except for a few conveniences, exactly with the
+ * <a href="http://docs.oracle.com/javase/specs/"> JVM specification 1.0</a>. See this paper for further details about
+ * the structure of a bytecode file.
  */
 public final class ClassParser {
 
-    private static final int MAGIC = 0xCAFEBABE;
-
+    private static final int BUFSIZE = 8192;
     private final DataInput dataInputStream;
-    private String class_name, superclassName;
+    private String className;
+    private String superclassName;
     private int accessFlags; // Access rights of parsed class
     private String[] interfaceNames; // Names of implemented interfaces
     private ConstantPool constantPool; // collection of constants
     private Annotations runtimeVisibleAnnotations; // "RuntimeVisibleAnnotations" attribute defined in the class
     private List<Annotations> runtimeVisibleFieldOrMethodAnnotations; // "RuntimeVisibleAnnotations" attribute defined elsewhere
-    private static final int BUFSIZE = 8192;
 
-    private static final String[] INTERFACES_EMPTY_ARRAY = new String[0];
+    private static final String[] INTERFACES_EMPTY_ARRAY = {};
 
     /**
      * Parses class from the given stream.
@@ -65,15 +60,13 @@ public final class ClassParser {
 
 
     /**
-     * Parses the given Java class file and return an object that represents
-     * the contained data, i.e., constants, methods, fields and commands.
-     * A <em>ClassFormatException</em> is raised, if the file is not a valid
-     * .class file. (This does not include verification of the byte code as it
-     * is performed by the java interpreter).
+     * Parses the given Java class file and return an object that represents the contained data, i.e., constants, methods,
+     * fields and commands. A <em>ClassFormatException</em> is raised, if the file is not a valid .class file. (This does
+     * not include verification of the byte code as it is performed by the java interpreter).
      *
      * @return Class object representing the parsed class file
-     * @throws  IOException If an I/O occurs reading the byte code
-     * @throws  ClassFormatException If the byte code is invalid
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     public JavaClass parse() throws IOException, ClassFormatException {
         /****************** Read headers ********************************/
@@ -97,8 +90,7 @@ public final class ClassParser {
         readAttributes(false);
 
         // Return the information we have gathered in a new object
-        return new JavaClass(class_name, superclassName,
-                accessFlags, constantPool, interfaceNames,
+        return new JavaClass(className, superclassName, accessFlags, constantPool, interfaceNames,
                 runtimeVisibleAnnotations, runtimeVisibleFieldOrMethodAnnotations);
     }
 
@@ -106,12 +98,12 @@ public final class ClassParser {
     /**
      * Reads information about the attributes of the class.
      * @param fieldOrMethod false if processing a class
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readAttributes(boolean fieldOrMethod) throws IOException, ClassFormatException {
-        final int attributes_count = dataInputStream.readUnsignedShort();
-        for (int i = 0; i < attributes_count; i++) {
+        final int attributesCount = dataInputStream.readUnsignedShort();
+        for (int i = 0; i < attributesCount; i++) {
             ConstantUtf8 c;
             String name;
             int name_index;
@@ -147,24 +139,24 @@ public final class ClassParser {
 
     /**
      * Reads information about the class and its super class.
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     *
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readClassInfo() throws IOException, ClassFormatException {
         accessFlags = dataInputStream.readUnsignedShort();
-        /* Interfaces are implicitly abstract, the flag should be set
-         * according to the JVM specification.
+        /*
+         * Interfaces are implicitly abstract, the flag should be set according to the JVM specification.
          */
         if ((accessFlags & Const.ACC_INTERFACE) != 0) {
             accessFlags |= Const.ACC_ABSTRACT;
         }
-        if ((accessFlags & Const.ACC_ABSTRACT) != 0
-                && (accessFlags & Const.ACC_FINAL) != 0) {
+        if ((accessFlags & Const.ACC_ABSTRACT) != 0 && (accessFlags & Const.ACC_FINAL) != 0) {
             throw new ClassFormatException("Class can't be both final and abstract");
         }
 
-        int class_name_index = dataInputStream.readUnsignedShort();
-        class_name = Utility.getClassName(constantPool, class_name_index);
+        int classNameIndex = dataInputStream.readUnsignedShort();
+        className = Utility.getClassName(constantPool, classNameIndex);
 
         int superclass_name_index = dataInputStream.readUnsignedShort();
         if (superclass_name_index > 0) {
@@ -178,8 +170,9 @@ public final class ClassParser {
 
     /**
      * Reads constant pool entries.
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     *
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readConstantPool() throws IOException, ClassFormatException {
         constantPool = new ConstantPool(dataInputStream);
@@ -188,12 +181,13 @@ public final class ClassParser {
 
     /**
      * Reads information about the fields of the class, i.e., its variables.
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     *
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readFields() throws IOException, ClassFormatException {
-        final int fields_count = dataInputStream.readUnsignedShort();
-        for (int i = 0; i < fields_count; i++) {
+        final int fieldsCount = dataInputStream.readUnsignedShort();
+        for (int i = 0; i < fieldsCount; i++) {
             // file.readUnsignedShort(); // Unused access flags
             // file.readUnsignedShort(); // name index
             // file.readUnsignedShort(); // signature index
@@ -206,13 +200,13 @@ public final class ClassParser {
 
     /******************** Private utility methods **********************/
     /**
-     * Checks whether the header of the file is ok.
-     * Of course, this has to be the first action on successive file reads.
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     * Checks whether the header of the file is ok. Of course, this has to be the first action on successive file reads.
+     *
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readID() throws IOException, ClassFormatException {
-        if (dataInputStream.readInt() != MAGIC) {
+        if (dataInputStream.readInt() != Const.JVM_CLASSFILE_MAGIC) {
             throw new ClassFormatException("It is not a Java .class file");
         }
     }
@@ -220,14 +214,15 @@ public final class ClassParser {
 
     /**
      * Reads information about the interfaces implemented by this class.
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     *
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readInterfaces() throws IOException, ClassFormatException {
-        final int interfaces_count = dataInputStream.readUnsignedShort();
-        if (interfaces_count > 0) {
-            interfaceNames = new String[interfaces_count];
-            for (int i = 0; i < interfaces_count; i++) {
+        final int interfacesCount = dataInputStream.readUnsignedShort();
+        if (interfacesCount > 0) {
+            interfaceNames = new String[interfacesCount];
+            for (int i = 0; i < interfacesCount; i++) {
                 int index = dataInputStream.readUnsignedShort();
                 interfaceNames[i] = Utility.getClassName(constantPool, index);
             }
@@ -239,12 +234,13 @@ public final class ClassParser {
 
     /**
      * Reads information about the methods of the class.
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     *
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readMethods() throws IOException, ClassFormatException {
-        final int methods_count = dataInputStream.readUnsignedShort();
-        for (int i = 0; i < methods_count; i++) {
+        final int methodsCount = dataInputStream.readUnsignedShort();
+        for (int i = 0; i < methodsCount; i++) {
             // file.readUnsignedShort(); // Unused access flags
             // file.readUnsignedShort(); // name index
             // file.readUnsignedShort(); // signature index
@@ -257,8 +253,9 @@ public final class ClassParser {
 
     /**
      * Reads major and minor version of compiler which created the file.
-     * @throws  IOException if an I/O occurs reading the the .class file
-     * @throws  ClassFormatException If the .class file is not valid
+     *
+     * @throws IOException if an I/O error occurs.
+     * @throws ClassFormatException if a class is malformed or cannot be interpreted as a class file
      */
     private void readVersion() throws IOException, ClassFormatException {
         // file.readUnsignedShort(); // Unused minor
diff --git a/java/org/apache/tomcat/util/bcel/classfile/Constant.java b/java/org/apache/tomcat/util/bcel/classfile/Constant.java
index fd39e62e7a..875c1d83e0 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/Constant.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/Constant.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,38 +22,13 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * Abstract superclass for classes to represent the different constant types
- * in the constant pool of a class file. The classes keep closely to
- * the JVM specification.
- *
- * @author  <A HREF="mailto:m.dahm@gmx.de">M. Dahm</A>
+ * Abstract superclass for classes to represent the different constant types in the constant pool of a class file. The
+ * classes keep closely to the JVM specification.
  */
 public abstract class Constant {
 
-    /* In fact this tag is redundant since we can distinguish different
-     * `Constant' objects by their type, i.e., via `instanceof'. In some
-     * places we will use the tag for switch()es anyway.
-     *
-     * First, we want match the specification as closely as possible. Second we
-     * need the tag as an index to select the corresponding class name from the
-     * `CONSTANT_NAMES' array.
-     */
-    protected final byte tag;
-
-    Constant(final byte tag) {
-        this.tag = tag;
-    }
-
-    /**
-     * @return Tag of constant, i.e., its type. No setTag() method to avoid
-     * confusion.
-     */
-    public final byte getTag() {
-        return tag;
-    }
-
     /**
-     * Read one constant from the given input, the type depends on a tag byte.
+     * Reads one constant from the given input, the type depends on a tag byte.
      *
      * @param dataInput Input stream
      * @return Constant object
@@ -65,42 +39,62 @@ public abstract class Constant {
         final byte b = dataInput.readByte(); // Read tag byte
         int skipSize;
         switch (b) {
-            case Const.CONSTANT_Class:
-                return new ConstantClass(dataInput);
-            case Const.CONSTANT_Integer:
-                return new ConstantInteger(dataInput);
-            case Const.CONSTANT_Float:
-                return new ConstantFloat(dataInput);
-            case Const.CONSTANT_Long:
-                return new ConstantLong(dataInput);
-            case Const.CONSTANT_Double:
-                return new ConstantDouble(dataInput);
-            case Const.CONSTANT_Utf8:
-                return ConstantUtf8.getInstance(dataInput);
-            case Const.CONSTANT_String:
-            case Const.CONSTANT_MethodType:
-            case Const.CONSTANT_Module:
-            case Const.CONSTANT_Package:
-                skipSize = 2; // unsigned short
-                break;
-            case Const.CONSTANT_MethodHandle:
-                skipSize = 3; // unsigned byte, unsigned short
-                break;
-            case Const.CONSTANT_Fieldref:
-            case Const.CONSTANT_Methodref:
-            case Const.CONSTANT_InterfaceMethodref:
-            case Const.CONSTANT_NameAndType:
-            case Const.CONSTANT_Dynamic:
-            case Const.CONSTANT_InvokeDynamic:
-                skipSize = 4; // unsigned short, unsigned short
-                break;
-            default:
-                throw new ClassFormatException("Invalid byte tag in constant pool: " + b);
+        case Const.CONSTANT_Class:
+            return new ConstantClass(dataInput);
+        case Const.CONSTANT_Integer:
+            return new ConstantInteger(dataInput);
+        case Const.CONSTANT_Float:
+            return new ConstantFloat(dataInput);
+        case Const.CONSTANT_Long:
+            return new ConstantLong(dataInput);
+        case Const.CONSTANT_Double:
+            return new ConstantDouble(dataInput);
+        case Const.CONSTANT_Utf8:
+            return ConstantUtf8.getInstance(dataInput);
+        case Const.CONSTANT_String:
+        case Const.CONSTANT_MethodType:
+        case Const.CONSTANT_Module:
+        case Const.CONSTANT_Package:
+            skipSize = 2; // unsigned short
+            break;
+        case Const.CONSTANT_MethodHandle:
+            skipSize = 3; // unsigned byte, unsigned short
+            break;
+        case Const.CONSTANT_Fieldref:
+        case Const.CONSTANT_Methodref:
+        case Const.CONSTANT_InterfaceMethodref:
+        case Const.CONSTANT_NameAndType:
+        case Const.CONSTANT_Dynamic:
+        case Const.CONSTANT_InvokeDynamic:
+            skipSize = 4; // unsigned short, unsigned short
+            break;
+        default:
+            throw new ClassFormatException("Invalid byte tag in constant pool: " + b);
         }
         Utility.skipFully(dataInput, skipSize);
         return null;
     }
 
+    /*
+     * In fact this tag is redundant since we can distinguish different 'Constant' objects by their type, i.e., via
+     * 'instanceof'. In some places we will use the tag for switch()es anyway.
+     *
+     * First, we want match the specification as closely as possible. Second we need the tag as an index to select the
+     * corresponding class name from the 'CONSTANT_NAMES' array.
+     */
+    private final byte tag;
+
+    Constant(final byte tag) {
+        this.tag = tag;
+    }
+
+    /**
+     * @return Tag of constant, i.e., its type. No setTag() method to avoid confusion.
+     */
+    public final byte getTag() {
+        return tag;
+    }
+
     @Override
     public String toString() {
         return "[" + tag + "]";
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ConstantClass.java b/java/org/apache/tomcat/util/bcel/classfile/ConstantClass.java
index bc0a8614c4..9f62473294 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ConstantClass.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ConstantClass.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,10 +22,9 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * This class is derived from the abstract {@link Constant}
- * and represents a reference to a (external) class.
+ * This class is derived from the abstract {@link Constant} and represents a reference to a (external) class.
  *
- * @see     Constant
+ * @see Constant
  */
 public final class ConstantClass extends Constant {
 
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ConstantDouble.java b/java/org/apache/tomcat/util/bcel/classfile/ConstantDouble.java
index 1c69a764e3..4641526c7e 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ConstantDouble.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ConstantDouble.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,10 +22,9 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * This class is derived from the abstract  {@link Constant}
- * and represents a reference to a Double object.
+ * This class is derived from the abstract {@link Constant} and represents a reference to a Double object.
  *
- * @see     Constant
+ * @see Constant
  */
 public final class ConstantDouble extends Constant {
 
@@ -37,8 +35,7 @@ public final class ConstantDouble extends Constant {
      * Initialize instance from file data.
      *
      * @param file Input stream
-     * @throws IOException If an I/O occurs reading from the provided
-     *         InoutStream
+     * @throws IOException if an I/O error occurs.
      */
     ConstantDouble(final DataInput file) throws IOException {
         super(Const.CONSTANT_Double);
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ConstantFloat.java b/java/org/apache/tomcat/util/bcel/classfile/ConstantFloat.java
index 4a699b6837..69bfffdcb5 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ConstantFloat.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ConstantFloat.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,10 +22,9 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * This class is derived from the abstract {@link Constant}
- * and represents a reference to a float object.
+ * This class is derived from the abstract {@link Constant} and represents a reference to a float object.
  *
- * @see     Constant
+ * @see Constant
  */
 public final class ConstantFloat extends Constant {
 
@@ -37,8 +35,7 @@ public final class ConstantFloat extends Constant {
      * Initialize instance from file data.
      *
      * @param file Input stream
-     * @throws IOException If an I/O occurs reading from the provided
-     *         InoutStream
+     * @throws IOException if an I/O error occurs.
      */
     ConstantFloat(final DataInput file) throws IOException {
         super(Const.CONSTANT_Float);
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ConstantInteger.java b/java/org/apache/tomcat/util/bcel/classfile/ConstantInteger.java
index c2960ac078..f3c4d2dde4 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ConstantInteger.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ConstantInteger.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,10 +22,9 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * This class is derived from the abstract {@link Constant}
- * and represents a reference to an int object.
+ * This class is derived from the abstract {@link Constant} and represents a reference to an int object.
  *
- * @see     Constant
+ * @see Constant
  */
 public final class ConstantInteger extends Constant {
 
@@ -37,8 +35,7 @@ public final class ConstantInteger extends Constant {
      * Initialize instance from file data.
      *
      * @param file Input stream
-     * @throws IOException If an I/O occurs reading from the provided
-     *         InoutStream
+     * @throws IOException if an I/O error occurs.
      */
     ConstantInteger(final DataInput file) throws IOException {
         super(Const.CONSTANT_Integer);
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java b/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java
index b6dc2c0f0d..6d0d609c0c 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,10 +22,9 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * This class is derived from the abstract {@link Constant}
- * and represents a reference to a long object.
+ * This class is derived from the abstract {@link Constant} and represents a reference to a long object.
  *
- * @see     Constant
+ * @see Constant
  */
 public final class ConstantLong extends Constant {
 
@@ -36,13 +34,12 @@ public final class ConstantLong extends Constant {
     /**
      * Initialize instance from file data.
      *
-     * @param input Input stream
-     * @throws IOException If an I/O occurs reading from the provided
-     *         InoutStream
+     * @param file Input stream
+     * @throws IOException if an I/O error occurs.
      */
-    ConstantLong(final DataInput input) throws IOException {
+    ConstantLong(final DataInput file) throws IOException {
         super(Const.CONSTANT_Long);
-        this.bytes = input.readLong();
+        this.bytes = file.readLong();
     }
 
 
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java b/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java
index ac36aa15b6..468314f097 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,14 +22,11 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * This class represents the constant pool, i.e., a table of constants, of
- * a parsed classfile. It may contain null references, due to the JVM
- * specification that skips an entry after an 8-byte constant (double,
- * long) entry.  Those interested in generating constant pools
- * programmatically should see <a href="../generic/ConstantPoolGen.html">
- * ConstantPoolGen</a>.
-
- * @see     Constant
+ * This class represents the constant pool, i.e., a table of constants, of a parsed classfile. It may contain null references, due to the JVM specification that
+ * skips an entry after an 8-byte constant (double, long) entry. Those interested in generating constant pools programmatically should see
+ * <a href="../generic/ConstantPoolGen.html"> ConstantPoolGen</a>.
+ *
+ * @see Constant
  */
 public class ConstantPool {
 
@@ -40,21 +36,20 @@ public class ConstantPool {
      * Reads constants from given input stream.
      *
      * @param input Input stream
-     * @throws  IOException if an I/O occurs reading the the InputStream
+     * @throws IOException if an I/O error occurs reading the the InputStream
      * @throws  ClassFormatException If the .class file is not valid
      */
     ConstantPool(final DataInput input) throws IOException, ClassFormatException {
-        final int constant_pool_count = input.readUnsignedShort();
-        constantPool = new Constant[constant_pool_count];
-        /* constantPool[0] is unused by the compiler and may be used freely
-         * by the implementation.
+        final int constantPoolCount = input.readUnsignedShort();
+        constantPool = new Constant[constantPoolCount];
+        /*
+         * constantPool[0] is unused by the compiler and may be used freely by the implementation.
          */
-        for (int i = 1; i < constant_pool_count; i++) {
+        for (int i = 1; i < constantPoolCount; i++) {
             constantPool[i] = Constant.readConstant(input);
-            /* Quote from the JVM specification:
-             * "All eight byte constants take up two spots in the constant pool.
-             * If this is the n'th byte in the constant pool, then the next item
-             * will be numbered n+2"
+            /*
+             * Quote from the JVM specification: "All eight byte constants take up two spots in the constant pool. If this is the n'th byte in the constant
+             * pool, then the next item will be numbered n+2"
              *
              * Thus we have to increment the index counter.
              */
@@ -70,38 +65,86 @@ public class ConstantPool {
     /**
      * Gets constant from constant pool.
      *
-     * @param  index Index in constant pool
+     * @param <T> A {@link Constant} subclass
+     * @param index Index in constant pool
      * @return Constant value
-     * @see    Constant
+     * @see Constant
+     * @throws ClassFormatException if index is invalid
      */
-    public Constant getConstant( final int index ) {
-        if (index >= constantPool.length || index < 0) {
-            throw new ClassFormatException("Invalid constant pool reference: " + index
-                    + ". Constant pool size is: " + constantPool.length);
+    @SuppressWarnings("unchecked")
+    public <T extends Constant> T getConstant(final int index) throws ClassFormatException {
+        return (T) getConstant(index, Constant.class);
+    }
+
+    /**
+     * Gets constant from constant pool and check whether it has the expected type.
+     *
+     * @param <T> A {@link Constant} subclass
+     * @param index Index in constant pool
+     * @param tag   Tag of expected constant, i.e., its type
+     * @return Constant value
+     * @see Constant
+     * @throws ClassFormatException if constant type does not match tag
+     */
+    public <T extends Constant> T getConstant(final int index, final byte tag) throws ClassFormatException {
+        final T c = getConstant(index);
+        if (c.getTag() != tag) {
+            throw new ClassFormatException("Expected class '" + Const.getConstantName(tag) + "' at index " + index + " and got " + c);
         }
-        return constantPool[index];
+        return c;
     }
 
     /**
-     * Gets constant from constant pool and check whether it has the
-     * expected type.
+     * Gets constant from constant pool.
      *
-     * @param  index Index in constant pool
-     * @param  tag Tag of expected constant, i.e., its type
+     * @param <T> A {@link Constant} subclass
+     * @param index Index in constant pool
+     * @param castTo The {@link Constant} subclass to cast to.
      * @return Constant value
-     * @see    Constant
-     * @throws  ClassFormatException If the constant is not of the expected type
+     * @see Constant
+     * @throws ClassFormatException if index is invalid
      */
-    public Constant getConstant( final int index, final byte tag ) throws ClassFormatException {
-        Constant c;
-        c = getConstant(index);
-        if (c == null) {
-            throw new ClassFormatException("Constant pool at index " + index + " is null.");
+    public <T extends Constant> T getConstant(final int index, final Class<T> castTo) throws ClassFormatException {
+        if (index >= constantPool.length || index < 0) {
+            throw new ClassFormatException("Invalid constant pool reference using index: " + index + ". Constant pool size is: " + constantPool.length);
         }
-        if (c.getTag() != tag) {
-            throw new ClassFormatException("Expected class `" + Const.getConstantName(tag)
-                    + "' at index " + index + " and got " + c);
+        if (constantPool[index] != null && !castTo.isAssignableFrom(constantPool[index].getClass())) {
+            throw new ClassFormatException("Invalid constant pool reference at index: " + index +
+                    ". Expected " + castTo + " but was " + constantPool[index].getClass());
+        }
+        // Previous check ensures this won't throw a ClassCastException
+        final T c = castTo.cast(constantPool[index]);
+        // the 0th element is always null
+        if (c == null && index != 0) {
+            final Constant prev = constantPool[index - 1];
+            if (prev == null || prev.getTag() != Const.CONSTANT_Double && prev.getTag() != Const.CONSTANT_Long) {
+                throw new ClassFormatException("Constant pool at index " + index + " is null.");
+            }
         }
         return c;
     }
+
+    /**
+     * Gets constant from constant pool and check whether it has the expected type.
+     *
+     * @param index Index in constant pool
+     * @return ConstantInteger value
+     * @see ConstantInteger
+     * @throws ClassFormatException if constant type does not match tag
+     */
+    public ConstantInteger getConstantInteger(final int index) {
+        return getConstant(index, Const.CONSTANT_Integer);
+    }
+
+    /**
+     * Gets constant from constant pool and check whether it has the expected type.
+     *
+     * @param index Index in constant pool
+     * @return ConstantUtf8 value
+     * @see ConstantUtf8
+     * @throws ClassFormatException if constant type does not match tag
+     */
+    public ConstantUtf8 getConstantUtf8(final int index) throws ClassFormatException {
+        return getConstant(index, Const.CONSTANT_Utf8);
+    }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java b/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java
index 0e2e9650dd..0656931d67 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java
@@ -1,56 +1,62 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
 import java.io.DataInput;
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * This class is derived from the abstract
- * <A HREF="org.apache.tomcat.util.bcel.classfile.Constant.html">Constant</A> class
- * and represents a reference to a Utf8 encoded string.
+ * Extends the abstract {@link Constant} to represent a reference to a UTF-8 encoded string.
  *
- * @see     Constant
+ * @see Constant
  */
 public final class ConstantUtf8 extends Constant {
 
-    private final String bytes;
-
-    static ConstantUtf8 getInstance(final DataInput input) throws IOException {
-        return new ConstantUtf8(input.readUTF());
+    /**
+     * Gets a new or cached instance of the given value.
+     * <p>
+     * See {@link ConstantUtf8} class Javadoc for details.
+     * </p>
+     *
+     * @param dataInput the value.
+     * @return a new or cached instance of the given value.
+     * @throws IOException if an I/O error occurs.
+     */
+    static ConstantUtf8 getInstance(final DataInput dataInput) throws IOException {
+        return new ConstantUtf8(dataInput.readUTF());
     }
 
+    private final String value;
+
     /**
-     * @param bytes Data
+     * @param value Data
      */
-    private ConstantUtf8(final String bytes) {
+    private ConstantUtf8(final String value) {
         super(Const.CONSTANT_Utf8);
-        if (bytes == null) {
-            throw new IllegalArgumentException("bytes must not be null!");
-        }
-        this.bytes = bytes;
+        this.value = Objects.requireNonNull(value, "value");
     }
 
     /**
      * @return Data converted to string.
      */
     public final String getBytes() {
-        return bytes;
+        return value;
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java b/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java
index e9dd30df5f..c0a421a840 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java
@@ -1,94 +1,144 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
 import java.io.DataInput;
 import java.io.IOException;
 
-public abstract class ElementValue
-{
-    private final int type;
+import org.apache.tomcat.util.bcel.Const;
 
-    private final ConstantPool cpool;
+/**
+ * The element_value structure is documented at https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.7.16.1
+ *
+ * <pre>
+ * element_value {
+ *    u1 tag;
+ *    union {
+ *        u2 const_value_index;
+ *
+ *        {   u2 type_name_index;
+ *            u2 const_name_index;
+ *        } enum_const_value;
+ *
+ *        u2 class_info_index;
+ *
+ *        annotation annotation_value;
+ *
+ *        {   u2            num_values;
+ *            element_value values[num_values];
+ *        } array_value;
+ *    } value;
+ *}
+ *</pre>
+ */
+public abstract class ElementValue {
 
+    public static final byte STRING = 's';
+    public static final byte ENUM_CONSTANT = 'e';
+    public static final byte CLASS = 'c';
+    public static final byte ANNOTATION = '@';
+    public static final byte ARRAY = '[';
+    public static final byte PRIMITIVE_INT = 'I';
+    public static final byte PRIMITIVE_BYTE = 'B';
+    public static final byte PRIMITIVE_CHAR = 'C';
+    public static final byte PRIMITIVE_DOUBLE = 'D';
+    public static final byte PRIMITIVE_FLOAT = 'F';
+    public static final byte PRIMITIVE_LONG = 'J';
+    public static final byte PRIMITIVE_SHORT = 'S';
+    public static final byte PRIMITIVE_BOOLEAN = 'Z';
 
-    ElementValue(final int type, final ConstantPool cpool) {
-        this.type = type;
-        this.cpool = cpool;
+    /**
+     * Reads an {@code element_value} as an {@code ElementValue}.
+     *
+     * @param input Raw data input.
+     * @param cpool Constant pool.
+     * @return a new ElementValue.
+     * @throws IOException if an I/O error occurs.
+     */
+    public static ElementValue readElementValue(final DataInput input, final ConstantPool cpool) throws IOException {
+        return readElementValue(input, cpool, 0);
     }
 
-    public abstract String stringifyValue();
+    /**
+     * Reads an {@code element_value} as an {@code ElementValue}.
+     *
+     * @param input Raw data input.
+     * @param cpool Constant pool.
+     * @param arrayNesting level of current array nesting.
+     * @return a new ElementValue.
+     * @throws IOException if an I/O error occurs.
+     * @since 6.7.0
+     */
+    public static ElementValue readElementValue(final DataInput input, final ConstantPool cpool, int arrayNesting)
+            throws IOException {
+        final byte tag = input.readByte();
+        switch (tag) {
+        case PRIMITIVE_BYTE:
+        case PRIMITIVE_CHAR:
+        case PRIMITIVE_DOUBLE:
+        case PRIMITIVE_FLOAT:
+        case PRIMITIVE_INT:
+        case PRIMITIVE_LONG:
+        case PRIMITIVE_SHORT:
+        case PRIMITIVE_BOOLEAN:
+        case STRING:
+            return new SimpleElementValue(tag, input.readUnsignedShort(), cpool);
 
-    public static final byte STRING            = 's';
-    public static final byte ENUM_CONSTANT     = 'e';
-    public static final byte CLASS             = 'c';
-    public static final byte ANNOTATION        = '@';
-    public static final byte ARRAY             = '[';
-    public static final byte PRIMITIVE_INT     = 'I';
-    public static final byte PRIMITIVE_BYTE    = 'B';
-    public static final byte PRIMITIVE_CHAR    = 'C';
-    public static final byte PRIMITIVE_DOUBLE  = 'D';
-    public static final byte PRIMITIVE_FLOAT   = 'F';
-    public static final byte PRIMITIVE_LONG    = 'J';
-    public static final byte PRIMITIVE_SHORT   = 'S';
-    public static final byte PRIMITIVE_BOOLEAN = 'Z';
+        case ENUM_CONSTANT:
+            input.readUnsignedShort();    // Unused type_index
+            return new EnumElementValue(ENUM_CONSTANT, input.readUnsignedShort(), cpool);
+
+        case CLASS:
+            return new ClassElementValue(CLASS, input.readUnsignedShort(), cpool);
 
-    public static ElementValue readElementValue(final DataInput input, final ConstantPool cpool) throws IOException
-    {
-        final byte type = input.readByte();
-        switch (type)
-        {
-            case PRIMITIVE_BYTE:
-            case PRIMITIVE_CHAR:
-            case PRIMITIVE_DOUBLE:
-            case PRIMITIVE_FLOAT:
-            case PRIMITIVE_INT:
-            case PRIMITIVE_LONG:
-            case PRIMITIVE_SHORT:
-            case PRIMITIVE_BOOLEAN:
-            case STRING:
-                return new SimpleElementValue(type, input.readUnsignedShort(), cpool);
-
-            case ENUM_CONSTANT:
-                input.readUnsignedShort();    // Unused type_index
-                return new EnumElementValue(ENUM_CONSTANT, input.readUnsignedShort(), cpool);
-
-            case CLASS:
-                return new ClassElementValue(CLASS, input.readUnsignedShort(), cpool);
-
-            case ANNOTATION:
-                // TODO isRuntimeVisible
-                return new AnnotationElementValue(ANNOTATION, new AnnotationEntry(input, cpool), cpool);
-
-            case ARRAY:
-                final int numArrayVals = input.readUnsignedShort();
-                final ElementValue[] evalues = new ElementValue[numArrayVals];
-                for (int j = 0; j < numArrayVals; j++)
-                {
-                    evalues[j] = ElementValue.readElementValue(input, cpool);
-                }
-                return new ArrayElementValue(ARRAY, evalues, cpool);
-
-            default:
-                throw new IllegalArgumentException(
-                        "Unexpected element value kind in annotation: " + type);
+        case ANNOTATION:
+            // TODO isRuntimeVisible
+            return new AnnotationElementValue(ANNOTATION, new AnnotationEntry(input, cpool), cpool);
+
+        case ARRAY:
+            arrayNesting++;
+            if (arrayNesting > Const.MAX_ARRAY_DIMENSIONS) {
+                // JVM spec 4.4.1
+                throw new ClassFormatException(String.format("Arrays are only valid if they represent %,d or fewer dimensions.",
+                        Integer.valueOf(Const.MAX_ARRAY_DIMENSIONS)));
+            }
+            final int numArrayVals = input.readUnsignedShort();
+            final ElementValue[] evalues = new ElementValue[numArrayVals];
+            for (int j = 0; j < numArrayVals; j++) {
+                evalues[j] = ElementValue.readElementValue(input, cpool, arrayNesting);
+            }
+            return new ArrayElementValue(ARRAY, evalues, cpool);
+
+        default:
+            throw new ClassFormatException("Unexpected element value kind in annotation: " + tag);
         }
     }
 
+
+    private final int type;
+
+    private final ConstantPool cpool;
+
+
+    ElementValue(final int type, final ConstantPool cpool) {
+        this.type = type;
+        this.cpool = cpool;
+    }
+
     final ConstantPool getConstantPool() {
         return cpool;
     }
@@ -96,4 +146,6 @@ public abstract class ElementValue
     final int getType() {
         return type;
     }
+
+    public abstract String stringifyValue();
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/ElementValuePair.java b/java/org/apache/tomcat/util/bcel/classfile/ElementValuePair.java
index 46e1a31aec..88e9efc204 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/ElementValuePair.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/ElementValuePair.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -23,12 +22,11 @@ import java.io.IOException;
 import org.apache.tomcat.util.bcel.Const;
 
 /**
- * an annotation's element value pair
+ * An annotation's element value pair.
  *
  * @since 6.0
  */
-public class ElementValuePair
-{
+public class ElementValuePair {
     private final ElementValue elementValue;
 
     private final ConstantPool constantPool;
@@ -41,15 +39,12 @@ public class ElementValuePair
         this.elementValue = ElementValue.readElementValue(file, constantPool);
     }
 
-    public String getNameString()
-    {
-        final ConstantUtf8 c = (ConstantUtf8) constantPool.getConstant(
-                elementNameIndex, Const.CONSTANT_Utf8);
+    public String getNameString() {
+        final ConstantUtf8 c = (ConstantUtf8) constantPool.getConstant(elementNameIndex, Const.CONSTANT_Utf8);
         return c.getBytes();
     }
 
-    public final ElementValue getValue()
-    {
+    public final ElementValue getValue() {
         return elementValue;
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/EnumElementValue.java b/java/org/apache/tomcat/util/bcel/classfile/EnumElementValue.java
index 7e95a1eaa8..7a1d2a0473 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/EnumElementValue.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/EnumElementValue.java
@@ -1,42 +1,34 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
-import org.apache.tomcat.util.bcel.Const;
-
-public class EnumElementValue extends ElementValue
-{
+public class EnumElementValue extends ElementValue {
     private final int valueIdx;
 
     EnumElementValue(final int type, final int valueIdx, final ConstantPool cpool) {
         super(type, cpool);
         if (type != ENUM_CONSTANT) {
-            throw new IllegalArgumentException(
-                    "Only element values of type enum can be built with this ctor - type specified: " + type);
+            throw new ClassFormatException("Only element values of type enum can be built with this ctor - type specified: " + type);
         }
         this.valueIdx = valueIdx;
     }
 
     @Override
-    public String stringifyValue()
-    {
-        final ConstantUtf8 cu8 = (ConstantUtf8) super.getConstantPool().getConstant(valueIdx,
-                Const.CONSTANT_Utf8);
-        return cu8.getBytes();
+    public String stringifyValue() {
+        return super.getConstantPool().getConstantUtf8(valueIdx).getBytes();
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java b/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java
index 819175a48f..a620342655 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java
@@ -1,19 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -21,12 +20,10 @@ import java.util.HashMap;
 import java.util.List;
 
 /**
- * Represents a Java class, i.e., the data structures, constant pool,
- * fields, methods and commands contained in a Java .class file.
- * See <a href="https://docs.oracle.com/javase/specs/">JVM specification</a> for details.
- * The intent of this class is to represent a parsed or otherwise existing
- * class file.  Those interested in programmatically generating classes
- * should see the <a href="../generic/ClassGen.html">ClassGen</a> class.
+ * Represents a Java class, i.e., the data structures, constant pool, fields, methods and commands contained in a Java
+ * .class file. See <a href="https://docs.oracle.com/javase/specs/">JVM specification</a> for details. The intent of
+ * this class is to represent a parsed or otherwise existing class file. Those interested in programmatically generating
+ * classes should see the <a href="../generic/ClassGen.html">ClassGen</a> class.
  */
 public class JavaClass {
 
@@ -43,13 +40,13 @@ public class JavaClass {
      * @param className Name of this class.
      * @param superclassName Name of this class's superclass.
      * @param accessFlags Access rights defined by bit flags
-     * @param constant_pool Array of constants
+     * @param constantPool Array of constants
      * @param interfaceNames Implemented interfaces
      * @param runtimeVisibleAnnotations "RuntimeVisibleAnnotations" attribute defined on the Class, or null
      * @param runtimeVisibleFieldOrMethodAnnotations "RuntimeVisibleAnnotations" attribute defined on the fields or methods, or null
      */
     JavaClass(final String className, final String superclassName,
-            final int accessFlags, final ConstantPool constant_pool, final String[] interfaceNames,
+            final int accessFlags, final ConstantPool constantPool, final String[] interfaceNames,
             final Annotations runtimeVisibleAnnotations, final List<Annotations> runtimeVisibleFieldOrMethodAnnotations) {
         this.accessFlags = accessFlags;
         this.runtimeVisibleAnnotations = runtimeVisibleAnnotations;
@@ -66,19 +63,6 @@ public class JavaClass {
         return accessFlags;
     }
 
-    /**
-     * Return annotations entries from "RuntimeVisibleAnnotations" attribute on
-     * the class, if there is any.
-     *
-     * @return An array of entries or {@code null}
-     */
-    public AnnotationEntry[] getAnnotationEntries() {
-        if (runtimeVisibleAnnotations != null) {
-            return runtimeVisibleAnnotations.getAnnotationEntries();
-        }
-        return null;
-    }
-
     /**
      * Return annotations entries from "RuntimeVisibleAnnotations" attribute on
      * the class, fields or methods if there is any.
@@ -93,7 +77,7 @@ public class JavaClass {
             }
         }
         if (runtimeVisibleFieldOrMethodAnnotations != null) {
-            for (Annotations annotations : runtimeVisibleFieldOrMethodAnnotations.toArray(new Annotations[0])) {
+            for (Annotations annotations : runtimeVisibleFieldOrMethodAnnotations.toArray(Annotations.EMPTY_ARRAY)) {
                 for (AnnotationEntry annotationEntry : annotations.getAnnotationEntries()) {
                     annotationEntries.putIfAbsent(annotationEntry.getAnnotationType(), annotationEntry);
                 }
@@ -102,10 +86,23 @@ public class JavaClass {
         if (annotationEntries.isEmpty()) {
             return null;
         } else {
-            return annotationEntries.values().toArray(new AnnotationEntry[0]);
+            return annotationEntries.values().toArray(AnnotationEntry.EMPTY_ARRAY);
         }
     }
 
+    /**
+     * Return annotations entries from "RuntimeVisibleAnnotations" attribute on
+     * the class, if there is any.
+     *
+     * @return An array of entries or {@code null}
+     */
+    public AnnotationEntry[] getAnnotationEntries() {
+        if (runtimeVisibleAnnotations != null) {
+            return runtimeVisibleAnnotations.getAnnotationEntries();
+        }
+        return null;
+    }
+
     /**
      * @return Class name.
      */
@@ -123,9 +120,8 @@ public class JavaClass {
 
 
     /**
-     * returns the super class name of this class. In the case that this class is
-     * java.lang.Object, it will return itself (java.lang.Object). This is probably incorrect
-     * but isn't fixed at this time to not break existing clients.
+     * returns the super class name of this class. In the case that this class is java.lang.Object, it will return itself
+     * (java.lang.Object). This is probably incorrect but isn't fixed at this time to not break existing clients.
      *
      * @return Superclass name.
      */
diff --git a/java/org/apache/tomcat/util/bcel/classfile/SimpleElementValue.java b/java/org/apache/tomcat/util/bcel/classfile/SimpleElementValue.java
index e450b675dc..295a8a9073 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/SimpleElementValue.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/SimpleElementValue.java
@@ -1,26 +1,24 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
 import org.apache.tomcat.util.bcel.Const;
 
-public class SimpleElementValue extends ElementValue
-{
+public class SimpleElementValue extends ElementValue {
     private final int index;
 
     SimpleElementValue(final int type, final int index, final ConstantPool cpool) {
@@ -31,61 +29,47 @@ public class SimpleElementValue extends ElementValue
     /**
      * @return Value entry index in the cpool
      */
-    public int getIndex()
-    {
+    public int getIndex() {
         return index;
     }
 
 
     // Whatever kind of value it is, return it as a string
     @Override
-    public String stringifyValue()
-    {
+    public String stringifyValue() {
         final ConstantPool cpool = super.getConstantPool();
-        final int _type = super.getType();
-        switch (_type)
-        {
+        final int type = super.getType();
+        switch (type) {
         case PRIMITIVE_INT:
-            final ConstantInteger c = (ConstantInteger) cpool.getConstant(getIndex(),
-                    Const.CONSTANT_Integer);
-            return Integer.toString(c.getBytes());
+            return Integer.toString(cpool.getConstantInteger(getIndex()).getBytes());
         case PRIMITIVE_LONG:
-            final ConstantLong j = (ConstantLong) cpool.getConstant(getIndex(),
-                    Const.CONSTANT_Long);
+            final ConstantLong j = cpool.getConstant(getIndex(), Const.CONSTANT_Long);
             return Long.toString(j.getBytes());
         case PRIMITIVE_DOUBLE:
-            final ConstantDouble d = (ConstantDouble) cpool.getConstant(getIndex(),
-                    Const.CONSTANT_Double);
+            final ConstantDouble d = cpool.getConstant(getIndex(), Const.CONSTANT_Double);
             return Double.toString(d.getBytes());
         case PRIMITIVE_FLOAT:
-            final ConstantFloat f = (ConstantFloat) cpool.getConstant(getIndex(),
-                    Const.CONSTANT_Float);
+            final ConstantFloat f = cpool.getConstant(getIndex(), Const.CONSTANT_Float);
             return Float.toString(f.getBytes());
         case PRIMITIVE_SHORT:
-            final ConstantInteger s = (ConstantInteger) cpool.getConstant(getIndex(),
-                    Const.CONSTANT_Integer);
+            final ConstantInteger s = cpool.getConstantInteger(getIndex());
             return Integer.toString(s.getBytes());
         case PRIMITIVE_BYTE:
-            final ConstantInteger b = (ConstantInteger) cpool.getConstant(getIndex(),
-                    Const.CONSTANT_Integer);
+            final ConstantInteger b = cpool.getConstantInteger(getIndex());
             return Integer.toString(b.getBytes());
         case PRIMITIVE_CHAR:
-            final ConstantInteger ch = (ConstantInteger) cpool.getConstant(
-                    getIndex(), Const.CONSTANT_Integer);
-            return String.valueOf((char)ch.getBytes());
+            final ConstantInteger ch = cpool.getConstantInteger(getIndex());
+            return String.valueOf((char) ch.getBytes());
         case PRIMITIVE_BOOLEAN:
-            final ConstantInteger bo = (ConstantInteger) cpool.getConstant(
-                    getIndex(), Const.CONSTANT_Integer);
+            final ConstantInteger bo = cpool.getConstantInteger(getIndex());
             if (bo.getBytes() == 0) {
                 return "false";
             }
             return "true";
         case STRING:
-            final ConstantUtf8 cu8 = (ConstantUtf8) cpool.getConstant(getIndex(),
-                    Const.CONSTANT_Utf8);
-            return cu8.getBytes();
+            return cpool.getConstantUtf8(getIndex()).getBytes();
         default:
-            throw new IllegalStateException("SimpleElementValue class does not know how to stringify type " + _type);
+            throw new IllegalStateException("SimpleElementValue class does not know how to stringify type " + type);
         }
     }
 }
diff --git a/java/org/apache/tomcat/util/bcel/classfile/Utility.java b/java/org/apache/tomcat/util/bcel/classfile/Utility.java
index 3c272a7641..162fac8b66 100644
--- a/java/org/apache/tomcat/util/bcel/classfile/Utility.java
+++ b/java/org/apache/tomcat/util/bcel/classfile/Utility.java
@@ -1,18 +1,18 @@
 /*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -27,10 +27,6 @@ import org.apache.tomcat.util.bcel.Const;
  */
 final class Utility {
 
-    private Utility() {
-        // Hide default constructor
-    }
-
     /**
      * Shorten long class name <em>str</em>, i.e., chop off the <em>prefix</em>,
      * if the
@@ -41,7 +37,7 @@ final class Utility {
      * @return Compacted class name
      */
     static String compactClassName(final String str) {
-        return str.replace('/', '.'); // Is `/' on all systems, even DOS
+        return str.replace('/', '.'); // Is '/' on all systems, even DOS
     }
 
     static String getClassName(final ConstantPool constantPool, final int index) {
@@ -61,4 +57,8 @@ final class Utility {
             throw new EOFException();
         }
     }
+
+    private Utility() {
+        // Hide default constructor
+    }
 }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index bbf91d02ba..fc23087c6e 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -161,6 +161,10 @@
         non-Tomcat resources. Pull request <pr>569</pr> provided by Sébastien
         Deleuze. (markt)
       </scode>
+      <add>
+        Update the internal fork of Apache Commons BCEL to b015e90 (2022-11-28,
+        6.7.0-RC1). (markt)
+      </add>
     </changelog>
   </subsection>
 </section>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


[tomcat] 02/02: Fix comment formatting - remove unintended use of back ticks

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit bb25a644880b0921b9efafe9c6740551c9c160ff
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Nov 28 20:03:15 2022 +0000

    Fix comment formatting - remove unintended use of back ticks
---
 java/org/apache/catalina/valves/rewrite/RewriteRule.java | 6 +++---
 java/org/apache/tomcat/jni/SSLContext.java               | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/java/org/apache/catalina/valves/rewrite/RewriteRule.java b/java/org/apache/catalina/valves/rewrite/RewriteRule.java
index d055882a13..71b6faa356 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteRule.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteRule.java
@@ -164,9 +164,9 @@ public class RewriteRule {
      *  can be chained with the following rule, etc.). This has the following
      *  effect: if a rule matches, then processing continues as usual, i.e.,
      *  the flag has no effect. If the rule does not match, then all following
-     *  chained rules are skipped. For instance, use it to remove the ``.www''
+     *  chained rules are skipped. For instance, use it to remove the ".www"
      *  part inside a per-directory rule set when you let an external redirect
-     *  happen (where the ``.www'' part should not to occur!).
+     *  happen (where the ".www" part should not to occur!).
      */
     protected boolean chain = false;
 
@@ -305,7 +305,7 @@ public class RewriteRule {
      *  specify them as a number or use one of the following symbolic names:
      *  temp (default), permanent, seeother. Use it for rules which should
      *  canonicalize the URL and give it back to the client, e.g., translate
-     *  ``/~'' into ``/u/'' or always append a slash to /u/user, etc. Note:
+     *  "/~" into "/u/" or always append a slash to /u/user, etc. Note:
      *  When you use this flag, make sure that the substitution field is a
      *  valid URL! If not, you are redirecting to an invalid location!
      *  And remember that this flag itself only prefixes the URL with
diff --git a/java/org/apache/tomcat/jni/SSLContext.java b/java/org/apache/tomcat/jni/SSLContext.java
index 0f047c5f95..4d64bd3f98 100644
--- a/java/org/apache/tomcat/jni/SSLContext.java
+++ b/java/org/apache/tomcat/jni/SSLContext.java
@@ -167,7 +167,7 @@ public final class SSLContext {
      * Point setCertificateFile at a PEM encoded certificate.  If
      * the certificate is encrypted, then you will be prompted for a
      * pass phrase.  Note that a kill -HUP will prompt again. A test
-     * certificate can be generated with `make certificate' under
+     * certificate can be generated with 'make certificate' under
      * built time. Keep in mind that if you've both a RSA and a DSA
      * certificate you can configure both in parallel (to also allow
      * the use of DSA ciphers, etc.)


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org