changeset 57763:f3b80456f22f

8235368: Update BCEL to Version 6.4.1 Reviewed-by: lancea, dfuchs, forax
author joehw
date Tue, 21 Jan 2020 23:33:18 +0000
parents cd08337a2eb0
children 93e22f0a6401
files src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Const.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/ExceptionConst.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Repository.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AccessFlags.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AnnotationDefault.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AnnotationEntry.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Annotations.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Attribute.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AttributeReader.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/BootstrapMethod.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/BootstrapMethods.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassFormatException.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassParser.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Code.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/CodeException.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Constant.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantCP.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantClass.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDynamic.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInvokeDynamic.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantLong.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodHandle.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantModule.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantObject.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPackage.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPool.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantString.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Deprecated.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ElementValue.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ElementValuePair.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Field.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClass.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClasses.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/JavaClass.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumber.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Method.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/MethodParameter.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Module.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleExports.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleMainClass.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleOpens.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModulePackages.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleProvides.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleRequires.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/NestHost.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/NestMembers.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Node.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/PMGClass.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ParameterAnnotationEntry.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ParameterAnnotations.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeInvisibleAnnotations.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeInvisibleParameterAnnotations.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeVisibleAnnotations.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeVisibleParameterAnnotations.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Signature.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/SourceFile.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMap.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Synthetic.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Unknown.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/UnknownAttributeReader.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Utility.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Visitor.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ARETURN.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ATHROW.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AnnotationEntryGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BIPUSH.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BasicType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BranchHandle.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BranchInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CPInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGenException.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassObserver.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2F.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2I.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2L.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DADD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPG.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCONST.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DDIV.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DLOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DMUL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DNEG.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DREM.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DRETURN.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DSTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DSUB.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X1.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X2.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X1.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X2.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ElementValueGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2D.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2I.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2L.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FADD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPG.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCONST.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FDIV.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FLOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FMUL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FNEG.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FREM.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FRETURN.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FSTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FSUB.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldObserver.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GETFIELD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GETSTATIC.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO_W.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GotoInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2B.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2C.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2D.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2F.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2L.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2S.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IADD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IAND.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ICONST.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IDIV.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFEQ.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFGE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFGT.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFLE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFLT.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNONNULL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNULL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IINC.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ILOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP1.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP2.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMUL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INEG.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEDYNAMIC.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IOR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IREM.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IRETURN.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISHL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISHR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISUB.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IUSHR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IXOR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IfInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/Instruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionComparator.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionConst.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionFactory.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionHandle.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionList.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JSR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JSR_W.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JsrInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2D.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2F.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2I.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LADD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LAND.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LCMP.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LCONST.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LDC.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LDC2_W.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LDC_W.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LDIV.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LLOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LMUL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LNEG.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LOOKUPSWITCH.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LOR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LREM.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LRETURN.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LSHL.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LSHR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LSTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LSUB.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LUSHR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LXOR.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LineNumberGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LoadClass.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LoadInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LocalVariableGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LocalVariableInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/MONITORENTER.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/MONITOREXIT.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/MULTIANEWARRAY.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/MethodGen.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/MethodObserver.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/NEW.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/NEWARRAY.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/NOP.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/NameSignatureInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/NamedAndTyped.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ObjectType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/POP.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/POP2.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/PUSH.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/PUTFIELD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/PUTSTATIC.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/PopInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/PushInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/RET.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/RETURN.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ReferenceType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ReturnInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ReturnaddressType.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/SALOAD.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/SASTORE.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/SIPUSH.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/SWAP.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/SWITCH.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/Select.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/StackConsumer.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/StackInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/StackProducer.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/StoreInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/TABLESWITCH.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/TargetLostException.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/Type.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/TypedInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/UnconditionalBranch.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/VariableLengthInstruction.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/Visitor.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/AttributeHTML.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/BCELComparator.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/BCELFactory.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/BCELifier.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/ByteSequence.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/Class2HTML.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/ClassQueue.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/ClassSet.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/ClassStack.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/CodeHTML.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/ConstantHTML.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/InstructionFinder.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/MethodHTML.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/ModularRuntimeImage.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/Repository.java src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/SyntheticRepository.java src/java.xml/share/legal/bcel.md
diffstat 318 files changed, 2907 insertions(+), 1261 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Const.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Const.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,8 +25,8 @@
 /**
  * Constants for the project, mostly defined in the JVM specification.
  *
- * @version $Id$
  * @since 6.0 (intended to replace the Constants interface)
+ * @LastModified: Jan 2020
  */
 public final class Const {
 
@@ -180,6 +180,18 @@
    *  */
   public static final short MINOR_13 = 0;
 
+  /** Major version number of class files for Java 14.
+   *  @see #MINOR_14
+   *  @since 6.4.0
+   *  */
+  public static final short MAJOR_14 = 58;
+
+  /** Minor version number of class files for Java 14.
+   *  @see #MAJOR_14
+   *  @since 6.4.0
+   *  */
+  public static final short MINOR_14 = 0;
+
   /** Default major version number.  Class file is for Java 1.1.
    *  @see #MAJOR_1_1
    *  */
@@ -199,12 +211,14 @@
   public static final int MAX_BYTE  = 255; // 2^8 - 1
 
   /** One of the access flags for fields, methods, or classes.
-   *  @see <a href='http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.5'>
-   *  Flag definitions for Fields in the Java Virtual Machine Specification (Java SE 8 Edition).</a>
-   *  @see <a href='http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.6'>
-   *  Flag definitions for Methods in the Java Virtual Machine Specification (Java SE 8 Edition).</a>
-   *  @see <a href='http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.6-300-D.1-D.1'>
-   *  Flag definitions for Classes in the Java Virtual Machine Specification (Java SE 8 Edition).</a>
+   *  @see <a href='http://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='http://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='http://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='http://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_PUBLIC       = 0x0001;
 
@@ -228,89 +242,123 @@
    */
   public static final short ACC_FINAL        = 0x0010;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for the Module attribute.
+   *  @see #ACC_PUBLIC
+   */
+  public static final short ACC_OPEN         = 0x0020;
+
+  /** One of the access flags for classes.
+   *  @see #ACC_PUBLIC
+   */
+  public static final short ACC_SUPER        = 0x0020;
+
+  /** One of the access flags for methods.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_SYNCHRONIZED = 0x0020;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for the Module attribute.
+   *  @see #ACC_PUBLIC
+   */
+  public static final short ACC_TRANSITIVE   = 0x0020;
+
+  /** One of the access flags for methods.
+   *  @see #ACC_PUBLIC
+   */
+  public static final short ACC_BRIDGE       = 0x0040;
+
+  /** One of the access flags for the Module attribute.
+   *  @see #ACC_PUBLIC
+   */
+  public static final short ACC_STATIC_PHASE = 0x0040;
+
+  /** One of the access flags for fields.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_VOLATILE     = 0x0040;
 
-  /** One of the access flags for fields, methods, or classes.
-   *  @see #ACC_PUBLIC
-   */
-  public static final short ACC_BRIDGE       = 0x0040;
-
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for fields.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_TRANSIENT    = 0x0080;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for methods.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_VARARGS      = 0x0080;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for methods.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_NATIVE       = 0x0100;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for classes.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_INTERFACE    = 0x0200;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for methods or classes.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_ABSTRACT     = 0x0400;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for methods.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_STRICT       = 0x0800;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for fields, methods, classes, MethodParameter attribute, or Module attribute.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_SYNTHETIC    = 0x1000;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for classes.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_ANNOTATION   = 0x2000;
 
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for fields or classes.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_ENUM         = 0x4000;
 
-  /** One of the access flags for fields, methods, or classes.
+  // Applies to classes compiled by new compilers only
+  /** One of the access flags for MethodParameter or Module attributes.
    *  @see #ACC_PUBLIC
    */
   public static final short ACC_MANDATED     = (short) 0x8000;
 
-  // Applies to classes compiled by new compilers only
-  /** One of the access flags for fields, methods, or classes.
+  /** One of the access flags for classes.
    *  @see #ACC_PUBLIC
    */
-  public static final short ACC_SUPER        = 0x0020;
+  public static final short ACC_MODULE       = (short) 0x8000;
 
   /** One of the access flags for fields, methods, or classes.
    *  @see #ACC_PUBLIC
+   *  @deprecated Use {@link #MAX_ACC_FLAG_I}
    */
+  @Deprecated
   public static final short MAX_ACC_FLAG     = ACC_ENUM;
 
+  /** One of the access flags for fields, methods, or classes.
+   * ACC_MODULE is negative as a short.
+   * @see #ACC_PUBLIC
+   * @since 6.4.0
+   */
+  public static final int MAX_ACC_FLAG_I = 0x8000; // ACC_MODULE is negative as a short
+
+  // Note that do to overloading:
+  // 'synchronized' is for methods, might be 'open' (if Module), 'super' (if class), or 'transitive' (if Module).
+  // 'volatile'     is for fields,  might be 'bridge' (if method) or 'static_phase' (if Module)
+  // 'transient'    is for fields,  might be 'varargs' (if method)
+  // 'module'       is for classes, might be 'mandated' (if Module or MethodParameters)
   /**
    * The names of the access flags.
    */
   private static final String[] ACCESS_NAMES = {
     "public", "private", "protected", "static", "final", "synchronized",
     "volatile", "transient", "native", "interface", "abstract", "strictfp",
-    "synthetic", "annotation", "enum"
+    "synthetic", "annotation", "enum", "module"
   };
 
   /** @since 6.0 */
@@ -2279,8 +2327,13 @@
   public static final byte ATTR_STACK_MAP_TABLE                         = 19;
   public static final byte ATTR_BOOTSTRAP_METHODS                       = 20;
   public static final byte ATTR_METHOD_PARAMETERS                       = 21;
+  public static final byte ATTR_MODULE                                  = 22;
+  public static final byte ATTR_MODULE_PACKAGES                         = 23;
+  public static final byte ATTR_MODULE_MAIN_CLASS                       = 24;
+  public static final byte ATTR_NEST_HOST                               = 25;
+  public static final byte ATTR_NEST_MEMBERS                            = 26;
 
-  public static final short KNOWN_ATTRIBUTES = 22; // count of attributes
+  public static final short KNOWN_ATTRIBUTES = 27; // count of attributes
 
   private static final String[] ATTRIBUTE_NAMES = {
     "SourceFile", "ConstantValue", "Code", "Exceptions",
@@ -2290,7 +2343,8 @@
     "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations",
     "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations",
     "AnnotationDefault", "LocalVariableTypeTable", "EnclosingMethod", "StackMapTable",
-    "BootstrapMethods", "MethodParameters"
+    "BootstrapMethods", "MethodParameters", "Module", "ModulePackages",
+    "ModuleMainClass", "NestHost", "NestMembers"
   };
 
   /**
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/ExceptionConst.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/ExceptionConst.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -23,7 +23,7 @@
 /**
  * Exception constants.
  * @since 6.0 (intended to replace the InstructionConstant interface)
- * @LastModified: Oct 2017
+ * @LastModified: Jan 2020
  */
 public final class ExceptionConst {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Repository.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Repository.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -31,8 +31,7 @@
  * @see com.sun.org.apache.bcel.internal.util.Repository
  * @see SyntheticRepository
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class Repository {
 
@@ -40,21 +39,24 @@
             = SyntheticRepository.getInstance();
 
 
-    /** @return currently used repository instance
+    /**
+     * @return currently used repository instance
      */
     public static com.sun.org.apache.bcel.internal.util.Repository getRepository() {
         return repository;
     }
 
 
-    /** Set repository instance to be used for class loading
+    /**
+     * Sets repository instance to be used for class loading
      */
     public static void setRepository( final com.sun.org.apache.bcel.internal.util.Repository rep ) {
         repository = rep;
     }
 
 
-    /** Lookup class somewhere found on your CLASSPATH, or whereever the
+    /**
+     * Lookups class somewhere found on your CLASSPATH, or whereever the
      * repository instance looks for it.
      *
      * @return class object for given fully qualified class name
@@ -67,7 +69,8 @@
 
 
     /**
-     * Try to find class source using the internal repository instance.
+     * Tries to find class source using the internal repository instance.
+     *
      * @see Class
      * @return JavaClass object for given runtime class
      * @throws ClassNotFoundException if the class could not be found or
@@ -87,7 +90,7 @@
 
 
     /**
-     * Add clazz to repository if there isn't an equally named class already in there.
+     * Adds clazz to repository if there isn't an equally named class already in there.
      *
      * @return old entry in repository
      */
@@ -99,7 +102,7 @@
 
 
     /**
-     * Remove class with given (fully qualified) name from repository.
+     * Removes class with given (fully qualified) name from repository.
      */
     public static void removeClass( final String clazz ) {
         repository.removeClass(repository.findClass(clazz));
@@ -107,7 +110,7 @@
 
 
     /**
-     * Remove given class from repository.
+     * Removes given class from repository.
      */
     public static void removeClass( final JavaClass clazz ) {
         repository.removeClass(clazz);
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AccessFlags.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AccessFlags.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,8 +25,7 @@
  * Super class for all objects that have modifiers like private, final, ... I.e.
  * classes, fields, and methods.
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class AccessFlags {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AnnotationDefault.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AnnotationDefault.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
 /**
  * Represents the default value of a annotation for a method info
  *
- * @version $Id: AnnotationDefault 1 2005-02-13 03:15:08Z dbrosius $
  * @since 6.0
  */
 public class AnnotationDefault extends Attribute {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AnnotationEntry.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AnnotationEntry.java	Tue Jan 21 23:33:18 2020 +0000
@@ -33,7 +33,6 @@
 /**
  * represents one annotation in the annotation table
  *
- * @version $Id: AnnotationEntry
  * @since 6.0
  */
 public class AnnotationEntry implements Node {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Annotations.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Annotations.java	Tue Jan 21 23:33:18 2020 +0000
@@ -28,7 +28,6 @@
 /**
  * base class for annotations
  *
- * @version $Id: Annotations
  * @since 6.0
  */
 public abstract class Annotations extends Attribute {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Attribute.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Attribute.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -36,7 +36,6 @@
  * <em>Synthetic</em> attributes are supported. The <em>Unknown</em>
  * attribute stands for non-standard-attributes.
  *
- * @version $Id$
  * @see ConstantValue
  * @see SourceFile
  * @see Code
@@ -48,44 +47,15 @@
  * @see Synthetic
  * @see Deprecated
  * @see Signature
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class Attribute implements Cloneable, Node {
-
+    private static final boolean debug = false;
     private int name_index; // Points to attribute name in constant pool
     private int length; // Content length of attribute field
     private final byte tag; // Tag to distinguish subclasses
     private ConstantPool constant_pool;
 
-    protected Attribute(final byte tag, final int name_index, final int length, final ConstantPool constant_pool) {
-        this.tag = tag;
-        this.name_index = name_index;
-        this.length = length;
-        this.constant_pool = constant_pool;
-    }
-
-    /**
-     * Called by objects that are traversing the nodes of the tree implicitely
-     * defined by the contents of a Java class. I.e., the hierarchy of methods,
-     * fields, attributes, etc. spawns a tree of objects.
-     *
-     * @param v Visitor object
-     */
-    @Override
-    public abstract void accept(Visitor v);
-
-    /**
-     * Dump attribute to file stream in binary format.
-     *
-     * @param file Output file stream
-     * @throws IOException
-     */
-    public void dump(final DataOutputStream file) throws IOException
-    {
-        file.writeShort(name_index);
-        file.writeInt(length);
-    }
-
     private static final Map<String, Object> readers = new HashMap<>();
 
     /**
@@ -101,34 +71,10 @@
         readers.put(name, r);
     }
 
-    /**
-     * Remove attribute reader
-     *
-     * @param name the name of the attribute as stored in the class file
-     */
-    public static void removeAttributeReader(final String name)
-    {
-        readers.remove(name);
-    }
-
-    /**
-     * Class method reads one attribute from the input data stream. This method
-     * must not be accessible from the outside. It is called by the Field and
-     * Method constructor methods.
-     *
-     * @see Field
-     * @see Method
-     *
-     * @param file Input stream
-     * @param constant_pool Array of constants
-     * @return Attribute
-     * @throws IOException
-     * @throws ClassFormatException
-     */
-    public static Attribute readAttribute(final DataInputStream file, final ConstantPool constant_pool)
-            throws IOException, ClassFormatException
-    {
-        return readAttribute((DataInput) file, constant_pool);
+    protected static void println(final String msg) {
+        if (debug) {
+            System.err.println(msg);
+        }
     }
 
     /**
@@ -203,7 +149,7 @@
             case Const.ATTR_STACK_MAP:
                 // old style stack map: unneeded for JDK5 and below;
                 // illegal(?) for JDK6 and above.  So just delete with a warning.
-                System.err.println("Warning: Obsolete StackMap attribute ignored.");
+                println("Warning: Obsolete StackMap attribute ignored.");
                 return new Unknown(name_index, length, file, constant_pool);
             case Const.ATTR_RUNTIME_VISIBLE_ANNOTATIONS:
                 return new RuntimeVisibleAnnotations(name_index, length, file, constant_pool);
@@ -227,6 +173,16 @@
                 return new BootstrapMethods(name_index, length, file, constant_pool);
             case Const.ATTR_METHOD_PARAMETERS:
                 return new MethodParameters(name_index, length, file, constant_pool);
+            case Const.ATTR_MODULE:
+                return new Module(name_index, length, file, constant_pool);
+            case Const.ATTR_MODULE_PACKAGES:
+                return new ModulePackages(name_index, length, file, constant_pool);
+            case Const.ATTR_MODULE_MAIN_CLASS:
+                return new ModuleMainClass(name_index, length, file, constant_pool);
+            case Const.ATTR_NEST_HOST:
+                return new NestHost(name_index, length, file, constant_pool);
+            case Const.ATTR_NEST_MEMBERS:
+                return new NestMembers(name_index, length, file, constant_pool);
             default:
                 // Never reached
                 throw new IllegalStateException("Unrecognized attribute type tag parsed: " + tag);
@@ -234,72 +190,53 @@
     }
 
     /**
-     * @return Name of attribute
-     * @since 6.0
+     * Class method reads one attribute from the input data stream. This method
+     * must not be accessible from the outside. It is called by the Field and
+     * Method constructor methods.
+     *
+     * @see Field
+     * @see Method
+     *
+     * @param file Input stream
+     * @param constant_pool Array of constants
+     * @return Attribute
+     * @throws IOException
+     * @throws ClassFormatException
      */
-    public String getName()
+    public static Attribute readAttribute(final DataInputStream file, final ConstantPool constant_pool)
+            throws IOException, ClassFormatException
     {
-        final ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(name_index, Const.CONSTANT_Utf8);
-        return c.getBytes();
+        return readAttribute((DataInput) file, constant_pool);
     }
 
     /**
-     * @return Length of attribute field in bytes.
+     * Remove attribute reader
+     *
+     * @param name the name of the attribute as stored in the class file
      */
-    public final int getLength()
+    public static void removeAttributeReader(final String name)
     {
-        return length;
+        readers.remove(name);
+    }
+
+    protected Attribute(final byte tag, final int name_index, final int length, final ConstantPool constant_pool)
+    {
+        this.tag = tag;
+        this.name_index = name_index;
+        this.length = length;
+        this.constant_pool = constant_pool;
     }
 
     /**
-     * @param length length in bytes.
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v
+     *            Visitor object
      */
-    public final void setLength(final int length)
-    {
-        this.length = length;
-    }
-
-    /**
-     * @param name_index of attribute.
-     */
-    public final void setNameIndex(final int name_index)
-    {
-        this.name_index = name_index;
-    }
-
-    /**
-     * @return Name index in constant pool of attribute name.
-     */
-    public final int getNameIndex()
-    {
-        return name_index;
-    }
-
-    /**
-     * @return Tag of attribute, i.e., its type. Value may not be altered, thus there is no setTag() method.
-     */
-    public final byte getTag()
-    {
-        return tag;
-    }
-
-    /**
-     * @return Constant pool used by this object.
-     * @see ConstantPool
-     */
-    public final ConstantPool getConstantPool()
-    {
-        return constant_pool;
-    }
-
-    /**
-     * @param constant_pool Constant pool to be used for this object.
-     * @see ConstantPool
-     */
-    public final void setConstantPool(final ConstantPool constant_pool)
-    {
-        this.constant_pool = constant_pool;
-    }
+    @Override
+    public abstract void accept(Visitor v);
 
     /**
      * Use copy() if you want to have a deep copy(), i.e., with all references
@@ -328,6 +265,87 @@
     public abstract Attribute copy(ConstantPool _constant_pool);
 
     /**
+     * Dump attribute to file stream in binary format.
+     *
+     * @param file
+     *            Output file stream
+     * @throws IOException
+     */
+    public void dump(final DataOutputStream file) throws IOException
+    {
+        file.writeShort(name_index);
+        file.writeInt(length);
+    }
+
+    /**
+     * @return Constant pool used by this object.
+     * @see ConstantPool
+     */
+    public final ConstantPool getConstantPool()
+    {
+        return constant_pool;
+    }
+
+    /**
+     * @return Length of attribute field in bytes.
+     */
+    public final int getLength()
+    {
+        return length;
+    }
+
+    /**
+     * @return Name of attribute
+     * @since 6.0
+     */
+    public String getName()
+    {
+        final ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(name_index, Const.CONSTANT_Utf8);
+        return c.getBytes();
+    }
+
+    /**
+     * @return Name index in constant pool of attribute name.
+     */
+    public final int getNameIndex()
+    {
+        return name_index;
+    }
+
+    /**
+     * @return Tag of attribute, i.e., its type. Value may not be altered, thus there is no setTag() method.
+     */
+    public final byte getTag()
+    {
+        return tag;
+    }
+
+    /**
+     * @param constant_pool Constant pool to be used for this object.
+     * @see ConstantPool
+     */
+    public final void setConstantPool(final ConstantPool constant_pool)
+    {
+        this.constant_pool = constant_pool;
+    }
+
+    /**
+     * @param length length in bytes.
+     */
+    public final void setLength(final int length)
+    {
+        this.length = length;
+    }
+
+    /**
+     * @param name_index of attribute.
+     */
+    public final void setNameIndex(final int name_index)
+    {
+        this.name_index = name_index;
+    }
+
+    /**
      * @return attribute name.
      */
     @Override
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AttributeReader.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/AttributeReader.java	Tue Jan 21 23:33:18 2020 +0000
@@ -27,7 +27,6 @@
  * method. These factory objects should implement this interface.
 
  * @see Attribute
- * @version $Id$
  *
  * @deprecated Use UnknownAttributeReader instead
  */
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/BootstrapMethod.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/BootstrapMethod.java	Tue Jan 21 23:33:18 2020 +0000
@@ -74,7 +74,7 @@
 
     /**
      * @param bootstrap_method_ref int index into constant_pool of CONSTANT_MethodHandle
-     * @param bootstrap_arguments int[] indices into constant_pool of CONSTANT_<type>_info
+     * @param bootstrap_arguments int[] indices into constant_pool of CONSTANT_[type]_info
      */
     public BootstrapMethod(final int bootstrap_method_ref, final int[] bootstrap_arguments) {
         this.bootstrap_method_ref = bootstrap_method_ref;
@@ -96,7 +96,7 @@
     }
 
     /**
-     * @return int[] of bootstrap_method indices into constant_pool of CONSTANT_<type>_info
+     * @return int[] of bootstrap_method indices into constant_pool of CONSTANT_[type]_info
      */
     public int[] getBootstrapArguments() {
         return bootstrap_arguments;
@@ -110,7 +110,7 @@
     }
 
     /**
-     * @param bootstrap_arguments int[] indices into constant_pool of CONSTANT_<type>_info
+     * @param bootstrap_arguments int[] indices into constant_pool of CONSTANT_[type]_info
      */
     public void setBootstrapArguments(final int[] bootstrap_arguments) {
         this.bootstrap_arguments = bootstrap_arguments;
@@ -133,12 +133,12 @@
         String bootstrap_method_name;
         bootstrap_method_name = constant_pool.constantToString(bootstrap_method_ref,
                 Const.CONSTANT_MethodHandle);
-        buf.append(Utility.compactClassName(bootstrap_method_name));
+        buf.append(Utility.compactClassName(bootstrap_method_name, false));
         final int num_bootstrap_arguments = bootstrap_arguments.length;
         if (num_bootstrap_arguments > 0) {
-            buf.append("\n     Method Arguments:");
+            buf.append("\nMethod Arguments:");
             for (int i = 0; i < num_bootstrap_arguments; i++) {
-                buf.append("\n     ").append(i).append(": ");
+                buf.append("\n  ").append(i).append(": ");
                 buf.append(constant_pool.constantToString(constant_pool.getConstant(bootstrap_arguments[i])));
             }
         }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/BootstrapMethods.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/BootstrapMethods.java	Tue Jan 21 23:33:18 2020 +0000
@@ -138,10 +138,17 @@
         final StringBuilder buf = new StringBuilder();
         buf.append("BootstrapMethods(");
         buf.append(bootstrap_methods.length);
-        buf.append("):\n");
+        buf.append("):");
         for (int i = 0; i < bootstrap_methods.length; i++) {
+            buf.append("\n");
+            final int start = buf.length();
             buf.append("  ").append(i).append(": ");
-            buf.append(bootstrap_methods[i].toString(super.getConstantPool())).append("\n");
+            final int indent_count = buf.length() - start;
+            final String[] lines = (bootstrap_methods[i].toString(super.getConstantPool())).split("\\r?\\n");
+            buf.append(lines[0]);
+            for (int j = 1; j < lines.length; j++) {
+                buf.append("\n").append("          ".substring(0,indent_count)).append(lines[j]);
+            }
         }
         return buf.toString();
     }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassFormatException.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassFormatException.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * that the file is malformed or otherwise cannot be interpreted as a
  * class file.
  *
- * @version $Id$
  */
 public class ClassFormatException extends RuntimeException {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassParser.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassParser.java	Tue Jan 21 23:33:18 2020 +0000
@@ -43,7 +43,6 @@
  * JVM specification 1.0</a>. See this paper for
  * further details about the structure of a bytecode file.
  *
- * @version $Id$
  */
 public final class ClassParser {
 
@@ -66,7 +65,7 @@
 
 
     /**
-     * Parse class from the given stream.
+     * Parses class from the given stream.
      *
      * @param inputStream Input stream
      * @param file_name File name
@@ -84,7 +83,7 @@
     }
 
 
-    /** Parse class from given .class file.
+    /** Parses class from given .class file.
      *
      * @param file_name file name
      */
@@ -95,7 +94,7 @@
     }
 
 
-    /** Parse class from given .class file in a ZIP-archive
+    /** Parses class from given .class file in a ZIP-archive
      *
      * @param zip_file zip file name
      * @param file_name file name
@@ -109,7 +108,7 @@
 
 
     /**
-     * Parse the given Java class file and return an object that represents
+     * 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
@@ -199,7 +198,7 @@
 
 
     /**
-     * Read information about the attributes of the class.
+     * Reads information about the attributes of the class.
      * @throws  IOException
      * @throws  ClassFormatException
      */
@@ -213,7 +212,7 @@
 
 
     /**
-     * Read information about the class and its super class.
+     * Reads information about the class and its super class.
      * @throws  IOException
      * @throws  ClassFormatException
      */
@@ -235,7 +234,7 @@
 
 
     /**
-     * Read constant pool entries.
+     * Reads constant pool entries.
      * @throws  IOException
      * @throws  ClassFormatException
      */
@@ -245,7 +244,7 @@
 
 
     /**
-     * Read information about the fields of the class, i.e., its variables.
+     * Reads information about the fields of the class, i.e., its variables.
      * @throws  IOException
      * @throws  ClassFormatException
      */
@@ -260,7 +259,7 @@
 
     /******************** Private utility methods **********************/
     /**
-     * Check whether the header of the file is ok.
+     * Checks whether the header of the file is ok.
      * Of course, this has to be the first action on successive file reads.
      * @throws  IOException
      * @throws  ClassFormatException
@@ -273,7 +272,7 @@
 
 
     /**
-     * Read information about the interfaces implemented by this class.
+     * Reads information about the interfaces implemented by this class.
      * @throws  IOException
      * @throws  ClassFormatException
      */
@@ -287,7 +286,7 @@
 
 
     /**
-     * Read information about the methods of the class.
+     * Reads information about the methods of the class.
      * @throws  IOException
      * @throws  ClassFormatException
      */
@@ -301,7 +300,7 @@
 
 
     /**
-     * Read major and minor version of compiler which created the file.
+     * Reads major and minor version of compiler which created the file.
      * @throws  IOException
      * @throws  ClassFormatException
      */
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Code.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Code.java	Tue Jan 21 23:33:18 2020 +0000
@@ -39,7 +39,6 @@
  * is used for debugging purposes and <em>LocalVariableTable</em> which
  * contains information about the local variables.
  *
- * @version $Id$
  * @see     Attribute
  * @see     CodeException
  * @see     LineNumberTable
@@ -144,7 +143,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(max_stack);
         file.writeShort(max_locals);
@@ -165,7 +164,7 @@
      * @return Collection of code attributes.
      * @see Attribute
      */
-    public final Attribute[] getAttributes() {
+    public Attribute[] getAttributes() {
         return attributes;
     }
 
@@ -199,7 +198,7 @@
     /**
      * @return Actual byte code of the method.
      */
-    public final byte[] getCode() {
+    public byte[] getCode() {
         return code;
     }
 
@@ -208,7 +207,7 @@
      * @return Table of handled exceptions.
      * @see CodeException
      */
-    public final CodeException[] getExceptionTable() {
+    public CodeException[] getExceptionTable() {
         return exception_table;
     }
 
@@ -216,7 +215,7 @@
     /**
      * @return Number of local variables.
      */
-    public final int getMaxLocals() {
+    public int getMaxLocals() {
         return max_locals;
     }
 
@@ -224,7 +223,7 @@
     /**
      * @return Maximum size of stack used by this method.
      */
-    public final int getMaxStack() {
+    public int getMaxStack() {
         return max_stack;
     }
 
@@ -260,7 +259,7 @@
     /**
      * @param attributes the attributes to set for this Code
      */
-    public final void setAttributes( final Attribute[] attributes ) {
+    public void setAttributes( final Attribute[] attributes ) {
         this.attributes = attributes != null ? attributes : new Attribute[0];
         super.setLength(calculateLength()); // Adjust length
     }
@@ -269,7 +268,7 @@
     /**
      * @param code byte code
      */
-    public final void setCode( final byte[] code ) {
+    public void setCode( final byte[] code ) {
         this.code = code != null ? code : new byte[0];
         super.setLength(calculateLength()); // Adjust length
     }
@@ -278,7 +277,7 @@
     /**
      * @param exception_table exception table
      */
-    public final void setExceptionTable( final CodeException[] exception_table ) {
+    public void setExceptionTable( final CodeException[] exception_table ) {
         this.exception_table = exception_table != null ? exception_table : new CodeException[0];
         super.setLength(calculateLength()); // Adjust length
     }
@@ -287,7 +286,7 @@
     /**
      * @param max_locals maximum number of local variables
      */
-    public final void setMaxLocals( final int max_locals ) {
+    public void setMaxLocals( final int max_locals ) {
         this.max_locals = max_locals;
     }
 
@@ -295,7 +294,7 @@
     /**
      * @param max_stack maximum stack size
      */
-    public final void setMaxStack( final int max_stack ) {
+    public void setMaxStack( final int max_stack ) {
         this.max_stack = max_stack;
     }
 
@@ -303,7 +302,7 @@
     /**
      * @return String representation of code chunk.
      */
-    public final String toString( final boolean verbose ) {
+    public String toString( final boolean verbose ) {
         final StringBuilder buf = new StringBuilder(100); // CHECKSTYLE IGNORE MagicNumber
         buf.append("Code(max_stack = ").append(max_stack).append(", max_locals = ").append(
                 max_locals).append(", code_length = ").append(code.length).append(")\n").append(
@@ -328,7 +327,7 @@
      * @return String representation of code chunk.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return toString(true);
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/CodeException.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/CodeException.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -31,9 +31,8 @@
  * attribute and is used only there. It contains a range in which a
  * particular exception handler is active.
  *
- * @version $Id$
  * @see     Code
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public final class CodeException implements Cloneable, Node {
 
@@ -104,7 +103,7 @@
      * @param file Output file stream
      * @throws IOException
      */
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeShort(start_pc);
         file.writeShort(end_pc);
         file.writeShort(handler_pc);
@@ -116,7 +115,7 @@
      * @return 0, if the handler catches any exception, otherwise it points to
      * the exception class which is to be caught.
      */
-    public final int getCatchType() {
+    public int getCatchType() {
         return catch_type;
     }
 
@@ -124,7 +123,7 @@
     /**
      * @return Exclusive end index of the region where the handler is active.
      */
-    public final int getEndPC() {
+    public int getEndPC() {
         return end_pc;
     }
 
@@ -132,7 +131,7 @@
     /**
      * @return Starting address of exception handler, relative to the code.
      */
-    public final int getHandlerPC() {
+    public int getHandlerPC() {
         return handler_pc;
     }
 
@@ -140,7 +139,7 @@
     /**
      * @return Inclusive start index of the region where the handler is active.
      */
-    public final int getStartPC() {
+    public int getStartPC() {
         return start_pc;
     }
 
@@ -148,7 +147,7 @@
     /**
      * @param catch_type the type of exception that is caught
      */
-    public final void setCatchType( final int catch_type ) {
+    public void setCatchType( final int catch_type ) {
         this.catch_type = catch_type;
     }
 
@@ -156,7 +155,7 @@
     /**
      * @param end_pc end of handled block
      */
-    public final void setEndPC( final int end_pc ) {
+    public void setEndPC( final int end_pc ) {
         this.end_pc = end_pc;
     }
 
@@ -164,7 +163,7 @@
     /**
      * @param handler_pc where the actual code is
      */
-    public final void setHandlerPC( final int handler_pc ) { // TODO unused
+    public void setHandlerPC( final int handler_pc ) { // TODO unused
         this.handler_pc = handler_pc;
     }
 
@@ -172,7 +171,7 @@
     /**
      * @param start_pc start of handled block
      */
-    public final void setStartPC( final int start_pc ) { // TODO unused
+    public void setStartPC( final int start_pc ) { // TODO unused
         this.start_pc = start_pc;
     }
 
@@ -181,7 +180,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return "CodeException(start_pc = " + start_pc + ", end_pc = " + end_pc + ", handler_pc = "
                 + handler_pc + ", catch_type = " + catch_type + ")";
     }
@@ -190,7 +189,7 @@
     /**
      * @return String representation.
      */
-    public final String toString( final ConstantPool cp, final boolean verbose ) {
+    public String toString( final ConstantPool cp, final boolean verbose ) {
         String str;
         if (catch_type == 0) {
             str = "<Any exception>(0)";
@@ -202,7 +201,7 @@
     }
 
 
-    public final String toString( final ConstantPool cp ) {
+    public String toString( final ConstantPool cp ) {
         return toString(cp, true);
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Constant.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Constant.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -32,8 +32,7 @@
  * in the constant pool of a class file. The classes keep closely to
  * the JVM specification.
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class Constant implements Cloneable, Node {
 
@@ -64,12 +63,10 @@
      */
     private byte tag;
 
-
     Constant(final byte tag) {
         this.tag = tag;
     }
 
-
     /**
      * Called by objects that are traversing the nodes of the tree implicitely
      * defined by the contents of a Java class. I.e., the hierarchy of methods,
@@ -80,10 +77,8 @@
     @Override
     public abstract void accept( Visitor v );
 
-
     public abstract void dump( DataOutputStream file ) throws IOException;
 
-
     /**
      * @return Tag of constant, i.e., its type. No setTag() method to avoid
      * confusion.
@@ -92,7 +87,6 @@
         return tag;
     }
 
-
     /**
      * @return String representation.
      */
@@ -101,7 +95,6 @@
         return Const.getConstantName(tag) + "[" + tag + "]";
     }
 
-
     /**
      * @return deep copy of this constant
      */
@@ -114,7 +107,6 @@
         return null;
     }
 
-
     @Override
     public Object clone() {
         try {
@@ -124,9 +116,8 @@
         }
     }
 
-
     /**
-     * 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
@@ -183,7 +174,6 @@
         return bcelComparator;
     }
 
-
     /**
      * @param comparator Comparison strategy object
      */
@@ -191,9 +181,8 @@
         bcelComparator = comparator;
     }
 
-
     /**
-     * Return value as defined by given BCELComparator strategy.
+     * Returns value as defined by given BCELComparator strategy.
      * By default two Constant objects are said to be equal when
      * the result of toString() is equal.
      *
@@ -204,9 +193,8 @@
         return bcelComparator.equals(this, obj);
     }
 
-
     /**
-     * Return value as defined by given BCELComparator strategy.
+     * Returns value as defined by given BCELComparator strategy.
      * By default return the hashcode of the result of toString().
      *
      * @see java.lang.Object#hashCode()
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantCP.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantCP.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
  * Abstract super class for Fieldref, Methodref, InterfaceMethodref and
  *                          InvokeDynamic constants.
  *
- * @version $Id$
  * @see     ConstantFieldref
  * @see     ConstantMethodref
  * @see     ConstantInterfaceMethodref
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantClass.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantClass.java	Tue Jan 21 23:33:18 2020 +0000
@@ -87,7 +87,7 @@
      * @throws IOException if an I/O error occurs writing to the DataOutputStream.
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeShort(name_index);
     }
@@ -96,7 +96,7 @@
     /**
      * @return Name index in constant pool of class name.
      */
-    public final int getNameIndex() {
+    public int getNameIndex() {
         return name_index;
     }
 
@@ -104,7 +104,7 @@
     /**
      * @param name_index the name index in the constant pool of this Constant Class
      */
-    public final void setNameIndex( final int name_index ) {
+    public void setNameIndex( final int name_index ) {
         this.name_index = name_index;
     }
 
@@ -129,7 +129,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(name_index = " + name_index + ")";
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
  * This class is derived from the abstract  {@link Constant}
  * and represents a reference to a Double object.
  *
- * @version $Id$
  * @see     Constant
  * @LastModified: Jun 2019
  */
@@ -87,7 +86,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeDouble(bytes);
     }
@@ -96,7 +95,7 @@
     /**
      * @return data, i.e., 8 bytes.
      */
-    public final double getBytes() {
+    public double getBytes() {
         return bytes;
     }
 
@@ -104,7 +103,7 @@
     /**
      * @param bytes the raw bytes that represent the double value
      */
-    public final void setBytes( final double bytes ) {
+    public void setBytes( final double bytes ) {
         this.bytes = bytes;
     }
 
@@ -113,7 +112,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(bytes = " + bytes + ")";
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDynamic.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDynamic.java	Tue Jan 21 23:33:18 2020 +0000
@@ -80,7 +80,7 @@
      * for use by ConstantInvokeDynamic.
      * @since 6.0
      */
-    public final int getBootstrapMethodAttrIndex() {
+    public int getBootstrapMethodAttrIndex() {
         return super.getClassIndex();  // AKA bootstrap_method_attr_index
     }
 
@@ -88,7 +88,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString().replace("class_index", "bootstrap_method_attr_index");
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
 /**
  * This class represents a constant pool reference to a field.
  *
- * @version $Id$
  */
 public final class ConstantFieldref extends ConstantCP {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
  * This class is derived from the abstract {@link Constant}
  * and represents a reference to a float object.
  *
- * @version $Id$
  * @see     Constant
  * @LastModified: Jun 2019
  */
@@ -88,7 +87,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeFloat(bytes);
     }
@@ -97,7 +96,7 @@
     /**
      * @return data, i.e., 4 bytes.
      */
-    public final float getBytes() {
+    public float getBytes() {
         return bytes;
     }
 
@@ -105,7 +104,7 @@
     /**
      * @param bytes the raw bytes that represent this float
      */
-    public final void setBytes( final float bytes ) {
+    public void setBytes( final float bytes ) {
         this.bytes = bytes;
     }
 
@@ -114,7 +113,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(bytes = " + bytes + ")";
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
  * This class is derived from the abstract {@link Constant}
  * and represents a reference to an int object.
  *
- * @version $Id$
  * @see     Constant
  * @LastModified: Jun 2019
  */
@@ -87,7 +86,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeInt(bytes);
     }
@@ -96,7 +95,7 @@
     /**
      * @return data, i.e., 4 bytes.
      */
-    public final int getBytes() {
+    public int getBytes() {
         return bytes;
     }
 
@@ -104,7 +103,7 @@
     /**
      * @param bytes the raw bytes that represent this integer
      */
-    public final void setBytes( final int bytes ) {
+    public void setBytes( final int bytes ) {
         this.bytes = bytes;
     }
 
@@ -113,7 +112,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(bytes = " + bytes + ")";
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
 /**
  * This class represents a constant pool reference to an interface method.
  *
- * @version $Id$
  */
 public final class ConstantInterfaceMethodref extends ConstantCP {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInvokeDynamic.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInvokeDynamic.java	Tue Jan 21 23:33:18 2020 +0000
@@ -80,7 +80,7 @@
      * for use by ConstantInvokeDynamic.
      * @since 6.0
      */
-    public final int getBootstrapMethodAttrIndex() {
+    public int getBootstrapMethodAttrIndex() {
         return super.getClassIndex();  // AKA bootstrap_method_attr_index
     }
 
@@ -88,7 +88,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString().replace("class_index", "bootstrap_method_attr_index");
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantLong.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantLong.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,8 +30,8 @@
  * This class is derived from the abstract {@link Constant}
  * and represents a reference to a long object.
  *
- * @version $Id$
  * @see     Constant
+ * @LastModified: Jan 2020
  */
 public final class ConstantLong extends Constant implements ConstantObject {
 
@@ -86,7 +86,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeLong(bytes);
     }
@@ -95,7 +95,7 @@
     /**
      * @return data, i.e., 8 bytes.
      */
-    public final long getBytes() {
+    public long getBytes() {
         return bytes;
     }
 
@@ -103,7 +103,7 @@
     /**
      * @param bytes the raw bytes that represent this long
      */
-    public final void setBytes( final long bytes ) {
+    public void setBytes( final long bytes ) {
         this.bytes = bytes;
     }
 
@@ -112,7 +112,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(bytes = " + bytes + ")";
     }
 
@@ -121,6 +121,6 @@
      */
     @Override
     public Object getConstantValue( final ConstantPool cp ) {
-        return Long.valueOf(bytes);
+        return bytes;
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodHandle.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodHandle.java	Tue Jan 21 23:33:18 2020 +0000
@@ -86,7 +86,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeByte(reference_kind);
         file.writeShort(reference_index);
@@ -117,7 +117,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(reference_kind = " + reference_kind +
                 ", reference_index = " + reference_index + ")";
     }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodType.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodType.java	Tue Jan 21 23:33:18 2020 +0000
@@ -84,7 +84,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeShort(descriptor_index);
     }
@@ -104,7 +104,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(descriptor_index = " + descriptor_index + ")";
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
 /**
  * This class represents a constant pool reference to a method.
  *
- * @version $Id$
  */
 public final class ConstantMethodref extends ConstantCP {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantModule.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantModule.java	Tue Jan 21 23:33:18 2020 +0000
@@ -90,7 +90,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeShort(name_index);
     }
@@ -99,7 +99,7 @@
     /**
      * @return Name index in constant pool of module name.
      */
-    public final int getNameIndex() {
+    public int getNameIndex() {
         return name_index;
     }
 
@@ -107,7 +107,7 @@
     /**
      * @param name_index the name index in the constant pool of this Constant Module
      */
-    public final void setNameIndex( final int name_index ) {
+    public void setNameIndex( final int name_index ) {
         this.name_index = name_index;
     }
 
@@ -132,7 +132,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(name_index = " + name_index + ")";
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java	Tue Jan 21 23:33:18 2020 +0000
@@ -32,7 +32,6 @@
  * and represents a reference to the name and signature
  * of a field or method.
  *
- * @version $Id$
  * @see     Constant
  */
 public final class ConstantNameAndType extends Constant {
@@ -91,7 +90,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeShort(name_index);
         file.writeShort(signature_index);
@@ -101,14 +100,14 @@
     /**
      * @return Name index in constant pool of field/method name.
      */
-    public final int getNameIndex() {
+    public int getNameIndex() {
         return name_index;
     }
 
 
     /** @return name
      */
-    public final String getName( final ConstantPool cp ) {
+    public String getName( final ConstantPool cp ) {
         return cp.constantToString(getNameIndex(), Const.CONSTANT_Utf8);
     }
 
@@ -116,14 +115,14 @@
     /**
      * @return Index in constant pool of field/method signature.
      */
-    public final int getSignatureIndex() {
+    public int getSignatureIndex() {
         return signature_index;
     }
 
 
     /** @return signature
      */
-    public final String getSignature( final ConstantPool cp ) {
+    public String getSignature( final ConstantPool cp ) {
         return cp.constantToString(getSignatureIndex(), Const.CONSTANT_Utf8);
     }
 
@@ -131,7 +130,7 @@
     /**
      * @param name_index the name index of this constant
      */
-    public final void setNameIndex( final int name_index ) {
+    public void setNameIndex( final int name_index ) {
         this.name_index = name_index;
     }
 
@@ -139,7 +138,7 @@
     /**
      * @param signature_index the signature index in the constant pool of this type
      */
-    public final void setSignatureIndex( final int signature_index ) {
+    public void setSignatureIndex( final int signature_index ) {
         this.signature_index = signature_index;
     }
 
@@ -148,7 +147,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(name_index = " + name_index + ", signature_index = "
                 + signature_index + ")";
     }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantObject.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantObject.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * This interface denotes those constants that have a "natural" value,
  * such as ConstantLong, ConstantString, etc..
  *
- * @version $Id$
  * @see     Constant
  */
 public interface ConstantObject {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPackage.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPackage.java	Tue Jan 21 23:33:18 2020 +0000
@@ -71,7 +71,7 @@
 
 
     /**
-     * Called by objects that are traversing the nodes of the tree implicitely
+     * Called by objects that are traversing the nodes of the tree implicitly
      * defined by the contents of a Java class. I.e., the hierarchy of methods,
      * fields, attributes, etc. spawns a tree of objects.
      *
@@ -90,7 +90,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeShort(name_index);
     }
@@ -99,7 +99,7 @@
     /**
      * @return Name index in constant pool of package name.
      */
-    public final int getNameIndex() {
+    public int getNameIndex() {
         return name_index;
     }
 
@@ -107,7 +107,7 @@
     /**
      * @param name_index the name index in the constant pool of this Constant Package
      */
-    public final void setNameIndex( final int name_index ) {
+    public void setNameIndex( final int name_index ) {
         this.name_index = name_index;
     }
 
@@ -132,7 +132,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(name_index = " + name_index + ")";
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPool.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPool.java	Tue Jan 21 23:33:18 2020 +0000
@@ -35,7 +35,6 @@
  * programatically should see <a href="../generic/ConstantPoolGen.html">
  * ConstantPoolGen</a>.
 
- * @version $Id$
  * @see     Constant
  * @see     com.sun.org.apache.bcel.internal.generic.ConstantPoolGen
  */
@@ -43,7 +42,6 @@
 
     private Constant[] constant_pool;
 
-
     /**
      * @param constant_pool Array of constants
      */
@@ -51,9 +49,8 @@
         this.constant_pool = constant_pool;
     }
 
-
     /**
-     * Read constants from given input stream.
+     * Reads constants from given input stream.
      *
      * @param input Input stream
      * @throws IOException
@@ -82,7 +79,6 @@
         }
     }
 
-
     /**
      * Called by objects that are traversing the nodes of the tree implicitely
      * defined by the contents of a Java class. I.e., the hierarchy of methods,
@@ -95,9 +91,8 @@
         v.visitConstantPool(this);
     }
 
-
     /**
-     * Resolve constant to a string representation.
+     * Resolves constant to a string representation.
      *
      * @param  c Constant to be printed
      * @return String representation
@@ -163,13 +158,22 @@
                         + ":" + constantToString(cid.getNameAndTypeIndex(),
                         Const.CONSTANT_NameAndType);
                 break;
+            case Const.CONSTANT_Module:
+                i = ((ConstantModule) c).getNameIndex();
+                c = getConstant(i, Const.CONSTANT_Utf8);
+                str = Utility.compactClassName(((ConstantUtf8) c).getBytes(), false);
+                break;
+            case Const.CONSTANT_Package:
+                i = ((ConstantPackage) c).getNameIndex();
+                c = getConstant(i, Const.CONSTANT_Utf8);
+                str = Utility.compactClassName(((ConstantUtf8) c).getBytes(), false);
+                break;
             default: // Never reached
                 throw new RuntimeException("Unknown constant type " + tag);
         }
         return str;
     }
 
-
     private static String escape( final String str ) {
         final int len = str.length();
         final StringBuilder buf = new StringBuilder(len + 5);
@@ -198,9 +202,8 @@
         return buf.toString();
     }
 
-
     /**
-     * Retrieve constant at `index' from constant pool and resolve it to
+     * Retrieves constant at `index' from constant pool and resolve it to
      * a string representation.
      *
      * @param  index of constant in constant pool
@@ -212,7 +215,6 @@
         return constantToString(c);
     }
 
-
     /**
      * Dump constant pool to file stream in binary format.
      *
@@ -228,9 +230,8 @@
         }
     }
 
-
     /**
-     * Get constant from constant pool.
+     * Gets constant from constant pool.
      *
      * @param  index Index in constant pool
      * @return Constant value
@@ -244,9 +245,8 @@
         return constant_pool[index];
     }
 
-
     /**
-     * Get constant from constant pool and check whether it has the
+     * Gets constant from constant pool and check whether it has the
      * expected type.
      *
      * @param  index Index in constant pool
@@ -268,7 +268,6 @@
         return c;
     }
 
-
     /**
      * @return Array of constants.
      * @see    Constant
@@ -277,9 +276,8 @@
         return constant_pool;
     }
 
-
     /**
-     * Get string from constant pool and bypass the indirection of
+     * Gets string from constant pool and bypass the indirection of
      * `ConstantClass' and `ConstantString' objects. I.e. these classes have
      * an index field that points to another entry of the constant pool of
      * type `ConstantUtf8' which contains the real data.
@@ -295,7 +293,7 @@
         Constant c;
         int i;
         c = getConstant(index, tag);
-        /* This switch() is not that elegant, since the two classes have the
+        /* This switch() is not that elegant, since the four classes have the
          * same contents, they just differ in the name of the index
          * field variable.
          * But we want to stick to the JVM naming conventions closely though
@@ -309,6 +307,12 @@
             case Const.CONSTANT_String:
                 i = ((ConstantString) c).getStringIndex();
                 break;
+            case Const.CONSTANT_Module:
+                i = ((ConstantModule) c).getNameIndex();
+                break;
+            case Const.CONSTANT_Package:
+                i = ((ConstantPackage) c).getNameIndex();
+                break;
             default:
                 throw new RuntimeException("getConstantString called with illegal tag " + tag);
         }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantString.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantString.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * This class is derived from the abstract {@link Constant}
  * and represents a reference to a String object.
  *
- * @version $Id$
  * @see     Constant
  */
 public final class ConstantString extends Constant implements ConstantObject {
@@ -87,7 +86,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(super.getTag());
         file.writeShort(string_index);
     }
@@ -96,7 +95,7 @@
     /**
      * @return Index in constant pool of the string (ConstantUtf8).
      */
-    public final int getStringIndex() {
+    public int getStringIndex() {
         return string_index;
     }
 
@@ -104,7 +103,7 @@
     /**
      * @param string_index the index into the constant of the string value
      */
-    public final void setStringIndex( final int string_index ) {
+    public void setStringIndex( final int string_index ) {
         this.string_index = string_index;
     }
 
@@ -113,7 +112,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return super.toString() + "(string_index = " + string_index + ")";
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -29,185 +29,180 @@
 import java.util.Map;
 
 /**
- * This class is derived from the abstract {@link Constant}
- * and represents a reference to a Utf8 encoded string.
+ * Extends the abstract {@link Constant} to represent a reference to a UTF-8 encoded string.
  *
- * @version $Id$
- * @see     Constant
- * @LastModified: Jun 2019
+ * @see Constant
+ * @LastModified: Jan 2020
  */
 public final class ConstantUtf8 extends Constant {
 
-    private final String bytes;
+    private static class Cache {
 
-    // TODO these should perhaps be AtomicInt?
-    private static volatile int considered = 0;
-    private static volatile int hits = 0;
-    private static volatile int skipped = 0;
-    private static volatile int created = 0;
+        private static final boolean BCEL_STATISTICS = false;
+        private static final int MAX_ENTRIES = 20000;
+        private static final int INITIAL_CAPACITY = (int) (MAX_ENTRIES / 0.75);
 
-    // Set the size to 0 or below to skip caching entirely
-    private static final int MAX_CACHED_SIZE = 200;
-    private static final boolean BCEL_STATISTICS = false;
+        private static final HashMap<String, ConstantUtf8> CACHE = new LinkedHashMap<String, ConstantUtf8>(
+            INITIAL_CAPACITY, 0.75f, true) {
 
-
-    private static class CACHE_HOLDER {
-
-        private static final int MAX_CACHE_ENTRIES = 20000;
-        private static final int INITIAL_CACHE_CAPACITY = (int)(MAX_CACHE_ENTRIES/0.75);
-
-        private static final HashMap<String, ConstantUtf8> CACHE =
-                new LinkedHashMap<String, ConstantUtf8>(INITIAL_CACHE_CAPACITY, 0.75f, true) {
             private static final long serialVersionUID = -8506975356158971766L;
 
             @Override
             protected boolean removeEldestEntry(final Map.Entry<String, ConstantUtf8> eldest) {
-                 return size() > MAX_CACHE_ENTRIES;
+                return size() > MAX_ENTRIES;
             }
         };
 
-    }
+        // Set the size to 0 or below to skip caching entirely
+        private static final int MAX_ENTRY_SIZE = 200;
 
-    // for accesss by test code
-    static void printStats() {
-        System.err.println("Cache hit " + hits + "/" + considered +", " + skipped + " skipped");
-        System.err.println("Total of " + created + " ConstantUtf8 objects created");
-    }
+        static boolean isEnabled() {
+            return Cache.MAX_ENTRIES > 0 && MAX_ENTRY_SIZE > 0;
+        }
 
-    // for accesss by test code
-    static void clearStats() {
-        hits = considered = skipped = created = 0;
-    }
-
-    static {
-        if (BCEL_STATISTICS) {
-            Runtime.getRuntime().addShutdownHook(new Thread() {
-                @Override
-                public void run() {
-                    printStats();
-                }
-            });
-        }
     }
 
     /**
+     * Clears the cache.
+     *
+     * @since 6.4.0
+     */
+    public static synchronized void clearCache() {
+        Cache.CACHE.clear();
+    }
+
+    /**
+     * Gets a new or cached instance of the given value.
+     * <p>
+     * See {@link ConstantUtf8} class Javadoc for details.
+     * </p>
+     *
+     * @param value the value.
+     * @return a new or cached instance of the given value.
      * @since 6.0
      */
-    public static ConstantUtf8 getCachedInstance(final String s) {
-        if (s.length() > MAX_CACHED_SIZE) {
-            skipped++;
-            return  new ConstantUtf8(s);
+    public static ConstantUtf8 getCachedInstance(final String value) {
+        if (value.length() > Cache.MAX_ENTRY_SIZE) {
+            return new ConstantUtf8(value);
         }
-        considered++;
+
         synchronized (ConstantUtf8.class) { // might be better with a specific lock object
-            ConstantUtf8 result = CACHE_HOLDER.CACHE.get(s);
+            ConstantUtf8 result = Cache.CACHE.get(value);
             if (result != null) {
-                    hits++;
-                    return result;
-                }
-            result = new ConstantUtf8(s);
-            CACHE_HOLDER.CACHE.put(s, result);
+                return result;
+            }
+            result = new ConstantUtf8(value);
+            Cache.CACHE.put(value, result);
             return result;
         }
     }
 
     /**
+     * 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.
      * @since 6.0
      */
-    public static ConstantUtf8 getInstance(final String s) {
-        return new ConstantUtf8(s);
+    public static ConstantUtf8 getInstance(final DataInput dataInput) throws IOException {
+        return getInstance(dataInput.readUTF());
     }
 
     /**
+     * Gets a new or cached instance of the given value.
+     * <p>
+     * See {@link ConstantUtf8} class Javadoc for details.
+     * </p>
+     *
+     * @param value the value.
+     * @return a new or cached instance of the given value.
      * @since 6.0
      */
-    public static ConstantUtf8 getInstance (final DataInput input)  throws IOException {
-        return getInstance(input.readUTF());
+    public static ConstantUtf8 getInstance(final String value) {
+        return Cache.isEnabled() ? getCachedInstance(value) : new ConstantUtf8(value);
+    }
+
+    private final String value;
+
+    /**
+     * Initializes from another object.
+     *
+     * @param constantUtf8 the value.
+     */
+    public ConstantUtf8(final ConstantUtf8 constantUtf8) {
+        this(constantUtf8.getBytes());
     }
 
     /**
-     * Initialize from another object.
+     * Initializes instance from file data.
+     *
+     * @param dataInput Input stream
+     * @throws IOException
      */
-    public ConstantUtf8(final ConstantUtf8 c) {
-        this(c.getBytes());
+    ConstantUtf8(final DataInput dataInput) throws IOException {
+        super(Const.CONSTANT_Utf8);
+        value = dataInput.readUTF();
     }
 
+    /**
+     * @param value Data
+     */
+    public ConstantUtf8(final String value) {
+        super(Const.CONSTANT_Utf8);
+        if (value == null) {
+            throw new IllegalArgumentException("Value must not be null.");
+        }
+        this.value = value;
+    }
 
     /**
-     * Initialize instance from file data.
-     *
-     * @param file Input stream
-     * @throws IOException
-     */
-    ConstantUtf8(final DataInput file) throws IOException {
-        super(Const.CONSTANT_Utf8);
-        bytes = file.readUTF();
-        created++;
-    }
-
-
-    /**
-     * @param bytes Data
-     */
-    public ConstantUtf8(final String bytes) {
-        super(Const.CONSTANT_Utf8);
-        if (bytes == null) {
-            throw new IllegalArgumentException("bytes must not be null!");
-        }
-        this.bytes = bytes;
-        created++;
-    }
-
-
-    /**
-     * Called by objects that are traversing the nodes of the tree implicitely
-     * defined by the contents of a Java class. I.e., the hierarchy of methods,
-     * fields, attributes, etc. spawns a tree of objects.
+     * Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class.
+     * I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
      *
      * @param v Visitor object
      */
     @Override
-    public void accept( final Visitor v ) {
+    public void accept(final Visitor v) {
         v.visitConstantUtf8(this);
     }
 
-
     /**
-     * Dump String in Utf8 format to file stream.
+     * Dumps String in Utf8 format to file stream.
      *
      * @param file Output file stream
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump(final DataOutputStream file) throws IOException {
         file.writeByte(super.getTag());
-        file.writeUTF(bytes);
+        file.writeUTF(value);
     }
 
-
     /**
      * @return Data converted to string.
      */
-    public final String getBytes() {
-        return bytes;
+    public String getBytes() {
+        return value;
     }
 
-
     /**
-     * @param bytes the raw bytes of this Utf-8
+     * @param bytes the raw bytes of this UTF-8
      * @deprecated (since 6.0)
      */
     @java.lang.Deprecated
-    public final void setBytes( final String bytes ) {
+    public void setBytes(final String bytes) {
         throw new UnsupportedOperationException();
     }
 
-
     /**
      * @return String representation
      */
     @Override
-    public final String toString() {
-        return super.toString() + "(\"" + Utility.replace(bytes, "\n", "\\n") + "\")";
+    public String toString() {
+        return super.toString() + "(\"" + Utility.replace(value, "\n", "\\n") + "\")";
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java	Tue Jan 21 23:33:18 2020 +0000
@@ -32,7 +32,6 @@
  * value, i.e., a default value for initializing a class field.
  * This class is instantiated by the <em>Attribute.readAttribute()</em> method.
  *
- * @version $Id$
  * @see     Attribute
  */
 public final class ConstantValue extends Attribute {
@@ -96,7 +95,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(constantvalue_index);
     }
@@ -105,7 +104,7 @@
     /**
      * @return Index in constant pool of constant value.
      */
-    public final int getConstantValueIndex() {
+    public int getConstantValueIndex() {
         return constantvalue_index;
     }
 
@@ -113,7 +112,7 @@
     /**
      * @param constantvalue_index the index info the constant pool of this constant value
      */
-    public final void setConstantValueIndex( final int constantvalue_index ) {
+    public void setConstantValueIndex( final int constantvalue_index ) {
         this.constantvalue_index = constantvalue_index;
     }
 
@@ -122,7 +121,7 @@
      * @return String representation of constant value.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         Constant c = super.getConstantPool().getConstant(constantvalue_index);
         String buf;
         int i;
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Deprecated.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Deprecated.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * deprecated method.
  * It is instantiated from the <em>Attribute.readAttribute()</em> method.
  *
- * @version $Id$
  * @see     Attribute
  */
 public final class Deprecated extends Attribute {
@@ -75,7 +74,7 @@
         if (length > 0) {
             bytes = new byte[length];
             input.readFully(bytes);
-            System.err.println("Deprecated attribute with length > 0");
+            println("Deprecated attribute with length > 0");
         }
     }
 
@@ -100,7 +99,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         if (super.getLength() > 0) {
             file.write(bytes, 0, super.getLength());
@@ -111,7 +110,7 @@
     /**
      * @return data bytes.
      */
-    public final byte[] getBytes() {
+    public byte[] getBytes() {
         return bytes;
     }
 
@@ -119,7 +118,7 @@
     /**
      * @param bytes the raw bytes that represents this byte array
      */
-    public final void setBytes( final byte[] bytes ) {
+    public void setBytes( final byte[] bytes ) {
         this.bytes = bytes;
     }
 
@@ -128,7 +127,7 @@
      * @return attribute name
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return Const.getAttributeName(Const.ATTR_DEPRECATED);
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * applied to all components of a JavaClass object. I.e. this class supplies the
  * traversal strategy, other classes can make use of it.
  *
- * @version $Id$
  */
 public class DescendingVisitor implements Visitor
 {
@@ -503,6 +502,21 @@
     {
         stack.push(obj);
         obj.accept(visitor);
+        final MethodParameter[] table = obj.getParameters();
+        for (final MethodParameter element : table) {
+            element.accept(this);
+        }
+        stack.pop();
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    @Override
+    public void visitMethodParameter(final MethodParameter obj)
+    {
+        stack.push(obj);
+        obj.accept(visitor);
         stack.pop();
     }
 
@@ -553,4 +567,92 @@
         obj.accept(visitor);
         stack.pop();
     }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModule(final Module obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        final ModuleRequires[] rtable = obj.getRequiresTable();
+        for (final ModuleRequires element : rtable) {
+            element.accept(this);
+        }
+        final ModuleExports[] etable = obj.getExportsTable();
+        for (final ModuleExports element : etable) {
+            element.accept(this);
+        }
+        final ModuleOpens[] otable = obj.getOpensTable();
+        for (final ModuleOpens element : otable) {
+            element.accept(this);
+        }
+        final ModuleProvides[] ptable = obj.getProvidesTable();
+        for (final ModuleProvides element : ptable) {
+            element.accept(this);
+        }
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleRequires(final ModuleRequires obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleExports(final ModuleExports obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleOpens(final ModuleOpens obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleProvides(final ModuleProvides obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModulePackages(final ModulePackages obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleMainClass(final ModuleMainClass obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitNestHost(final NestHost obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitNestMembers(final NestMembers obj) {
+        stack.push(obj);
+        obj.accept(visitor);
+        stack.pop();
+    }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ElementValue.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ElementValue.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,9 +25,8 @@
 import java.io.IOException;
 
 /**
- * @version $Id: ElementValue
  * @since 6.0
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class ElementValue
 {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ElementValuePair.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ElementValuePair.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
 /**
  * an annotation's element value pair
  *
- * @version $Id: ElementValuePair
  * @since 6.0
  */
 public class ElementValuePair
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * with the DescendingVisitor class, e.g. By courtesy of David Spencer.
  *
  * @see DescendingVisitor
- * @version $Id$
  */
 public class EmptyVisitor implements Visitor
 {
@@ -280,6 +279,14 @@
     }
 
     /**
+     * @since 6.4.0
+     */
+    @Override
+    public void visitMethodParameter(final MethodParameter obj)
+    {
+    }
+
+    /**
      * @since 6.0
      */
     @Override
@@ -315,11 +322,55 @@
     public void visitConstantModule(final ConstantModule constantModule) {
     }
 
-
     /**
      * @since 6.3
      */
     @Override
     public void visitConstantDynamic(final ConstantDynamic obj) {
     }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModule(final Module obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleRequires(final ModuleRequires obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleExports(final ModuleExports obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleOpens(final ModuleOpens obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleProvides(final ModuleProvides obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModulePackages(final ModulePackages obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitModuleMainClass(final ModuleMainClass obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitNestHost(final NestHost obj) {
+    }
+
+    /** @since 6.4.0 */
+    @Override
+    public void visitNestMembers(final NestMembers obj) {
+    }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java	Tue Jan 21 23:33:18 2020 +0000
@@ -35,7 +35,6 @@
  * attribute using the name <em>Exceptions</em> (which is inconsistent
  * with the other classes).
  *
- * @version $Id$
  * @see     Code
  */
 public final class ExceptionTable extends Attribute {
@@ -103,7 +102,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(exception_index_table.length);
         for (final int index : exception_index_table) {
@@ -115,7 +114,7 @@
     /**
      * @return Array of indices into constant pool of thrown exceptions.
      */
-    public final int[] getExceptionIndexTable() {
+    public int[] getExceptionIndexTable() {
         return exception_index_table;
     }
 
@@ -123,7 +122,7 @@
     /**
      * @return Length of exception table.
      */
-    public final int getNumberOfExceptions() {
+    public int getNumberOfExceptions() {
         return exception_index_table == null ? 0 : exception_index_table.length;
     }
 
@@ -131,7 +130,7 @@
     /**
      * @return class names of thrown exceptions
      */
-    public final String[] getExceptionNames() {
+    public String[] getExceptionNames() {
         final String[] names = new String[exception_index_table.length];
         for (int i = 0; i < exception_index_table.length; i++) {
             names[i] = super.getConstantPool().getConstantString(exception_index_table[i],
@@ -145,7 +144,7 @@
      * @param exception_index_table the list of exception indexes
      * Also redefines number_of_exceptions according to table length.
      */
-    public final void setExceptionIndexTable( final int[] exception_index_table ) {
+    public void setExceptionIndexTable( final int[] exception_index_table ) {
         this.exception_index_table = exception_index_table != null ? exception_index_table : new int[0];
     }
 
@@ -154,7 +153,7 @@
      * @return String representation, i.e., a list of thrown exceptions.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final StringBuilder buf = new StringBuilder();
         String str;
         buf.append("Exceptions: ");
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Field.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Field.java	Tue Jan 21 23:33:18 2020 +0000
@@ -33,7 +33,6 @@
  * This class represents the field info structure, i.e., the representation
  * for a variable in the class. See JVM specification for details.
  *
- * @version $Id$
  */
 public final class Field extends FieldOrMethod {
 
@@ -104,7 +103,7 @@
     /**
      * @return constant value associated with this field (may be null)
      */
-    public final ConstantValue getConstantValue() {
+    public ConstantValue getConstantValue() {
         for (final Attribute attribute : super.getAttributes()) {
             if (attribute.getTag() == Const.ATTR_CONSTANT_VALUE) {
                 return (ConstantValue) attribute;
@@ -121,7 +120,7 @@
      * @return String representation of field, including the signature.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         String name;
         String signature;
         String access; // Short cuts to constant pool
@@ -149,7 +148,7 @@
     /**
      * @return deep copy of this field
      */
-    public final Field copy( final ConstantPool _constant_pool ) {
+    public Field copy( final ConstantPool _constant_pool ) {
         return (Field) copy_(_constant_pool);
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -29,8 +29,7 @@
 /**
  * Abstract super class for fields and methods.
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class FieldOrMethod extends AccessFlags implements Cloneable, Node {
     private int name_index; // Points to field name in constant pool
@@ -69,7 +68,8 @@
      * @deprecated (6.0) Use {@link #FieldOrMethod(java.io.DataInput, ConstantPool)} instead.
      */
     @java.lang.Deprecated
-    protected FieldOrMethod(final DataInputStream file, final ConstantPool constant_pool) throws IOException,
+    protected FieldOrMethod(final DataInputStream file, final ConstantPool constant_pool)
+            throws IOException,
             ClassFormatException {
         this((DataInput) file, constant_pool);
     }
@@ -80,8 +80,8 @@
      * @throws IOException
      * @throws ClassFormatException
      */
-    protected FieldOrMethod(final DataInput file,
-            final ConstantPool constant_pool) throws IOException, ClassFormatException {
+    protected FieldOrMethod(final DataInput file, final ConstantPool constant_pool)
+            throws IOException, ClassFormatException {
         this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), null,
                 constant_pool);
         final int attributes_count = file.readUnsignedShort();
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClass.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClass.java	Tue Jan 21 23:33:18 2020 +0000
@@ -32,7 +32,6 @@
  * indices of the inner and outer classes, the name and the attributes
  * of the inner class.
  *
- * @version $Id$
  * @see InnerClasses
  */
 public final class InnerClass implements Cloneable, Node {
@@ -97,7 +96,7 @@
      * @param file Output file stream
      * @throws IOException
      */
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeShort(inner_class_index);
         file.writeShort(outer_class_index);
         file.writeShort(inner_name_index);
@@ -108,7 +107,7 @@
     /**
      * @return access flags of inner class.
      */
-    public final int getInnerAccessFlags() {
+    public int getInnerAccessFlags() {
         return inner_access_flags;
     }
 
@@ -116,7 +115,7 @@
     /**
      * @return class index of inner class.
      */
-    public final int getInnerClassIndex() {
+    public int getInnerClassIndex() {
         return inner_class_index;
     }
 
@@ -124,7 +123,7 @@
     /**
      * @return name index of inner class.
      */
-    public final int getInnerNameIndex() {
+    public int getInnerNameIndex() {
         return inner_name_index;
     }
 
@@ -132,7 +131,7 @@
     /**
      * @return class index of outer class.
      */
-    public final int getOuterClassIndex() {
+    public int getOuterClassIndex() {
         return outer_class_index;
     }
 
@@ -140,7 +139,7 @@
     /**
      * @param inner_access_flags access flags for this inner class
      */
-    public final void setInnerAccessFlags( final int inner_access_flags ) {
+    public void setInnerAccessFlags( final int inner_access_flags ) {
         this.inner_access_flags = inner_access_flags;
     }
 
@@ -148,7 +147,7 @@
     /**
      * @param inner_class_index index into the constant pool for this class
      */
-    public final void setInnerClassIndex( final int inner_class_index ) {
+    public void setInnerClassIndex( final int inner_class_index ) {
         this.inner_class_index = inner_class_index;
     }
 
@@ -156,7 +155,7 @@
     /**
      * @param inner_name_index index into the constant pool for this class's name
      */
-    public final void setInnerNameIndex( final int inner_name_index ) { // TODO unused
+    public void setInnerNameIndex( final int inner_name_index ) { // TODO unused
         this.inner_name_index = inner_name_index;
     }
 
@@ -164,7 +163,7 @@
     /**
      * @param outer_class_index index into the constant pool for the owning class
      */
-    public final void setOuterClassIndex( final int outer_class_index ) { // TODO unused
+    public void setOuterClassIndex( final int outer_class_index ) { // TODO unused
         this.outer_class_index = outer_class_index;
     }
 
@@ -173,7 +172,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return "InnerClass(" + inner_class_index + ", " + outer_class_index + ", "
                 + inner_name_index + ", " + inner_access_flags + ")";
     }
@@ -182,16 +181,16 @@
     /**
      * @return Resolved string representation
      */
-    public final String toString( final ConstantPool constant_pool ) {
+    public String toString( final ConstantPool constant_pool ) {
         String outer_class_name;
         String inner_name;
         String inner_class_name = constant_pool.getConstantString(inner_class_index,
                 Const.CONSTANT_Class);
-        inner_class_name = Utility.compactClassName(inner_class_name);
+        inner_class_name = Utility.compactClassName(inner_class_name, false);
         if (outer_class_index != 0) {
             outer_class_name = constant_pool.getConstantString(outer_class_index,
                     Const.CONSTANT_Class);
-            outer_class_name = " of class " + Utility.compactClassName(outer_class_name);
+            outer_class_name = " of class " + Utility.compactClassName(outer_class_name, false);
         } else {
             outer_class_name = "";
         }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClasses.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClasses.java	Tue Jan 21 23:33:18 2020 +0000
@@ -33,7 +33,6 @@
  * to the source file of this class.
  * It is instantiated from the <em>Attribute.readAttribute()</em> method.
  *
- * @version $Id$
  * @see     Attribute
  */
 public final class InnerClasses extends Attribute {
@@ -103,7 +102,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(inner_classes.length);
         for (final InnerClass inner_class : inner_classes) {
@@ -115,7 +114,7 @@
     /**
      * @return array of inner class "records"
      */
-    public final InnerClass[] getInnerClasses() {
+    public InnerClass[] getInnerClasses() {
         return inner_classes;
     }
 
@@ -123,7 +122,7 @@
     /**
      * @param inner_classes the array of inner classes
      */
-    public final void setInnerClasses( final InnerClass[] inner_classes ) {
+    public void setInnerClasses( final InnerClass[] inner_classes ) {
         this.inner_classes = inner_classes != null ? inner_classes : new InnerClass[0];
     }
 
@@ -132,7 +131,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final StringBuilder buf = new StringBuilder();
         buf.append("InnerClasses(");
         buf.append(inner_classes.length);
@@ -140,7 +139,7 @@
         for (final InnerClass inner_class : inner_classes) {
             buf.append(inner_class.toString(super.getConstantPool())).append("\n");
         }
-        return buf.toString();
+        return buf.substring(0, buf.length()-1); // remove the last newline
     }
 
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/JavaClass.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/JavaClass.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -39,16 +39,15 @@
 import com.sun.org.apache.bcel.internal.util.SyntheticRepository;
 
 /**
- * Represents a Java class, i.e., the data structures, constant pool, fields,
- * methods and commands contained in a Java .class file. See <a
- * href="http://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 programatically generating classes
+ * Represents a Java class, i.e., the data structures, constant pool,
+ * fields, methods and commands contained in a Java .class file.
+ * See <a href="http://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 programatically generating classes
  * should see the <a href="../generic/ClassGen.html">ClassGen</a> class.
 
- * @version $Id$
  * @see com.sun.org.apache.bcel.internal.generic.ClassGen
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class JavaClass extends AccessFlags implements Cloneable, Node, Comparable<JavaClass> {
 
@@ -75,6 +74,7 @@
     public static final byte HEAP = 1;
     public static final byte FILE = 2;
     public static final byte ZIP = 3;
+    private static final boolean debug = false;
 
     private static BCELComparator bcelComparator = new BCELComparator() {
 
@@ -218,6 +218,16 @@
         v.visitJavaClass(this);
     }
 
+
+    /* Print debug information depending on `JavaClass.debug'
+     */
+    static void Debug( final String str ) {
+        if (debug) {
+            System.out.println(str);
+        }
+    }
+
+
     /**
      * Dump class to a file.
      *
@@ -606,7 +616,7 @@
             }
             buf.append('\n');
         }
-        buf.append("filename\t\t").append(file_name).append('\n');
+        buf.append("file name\t\t").append(file_name).append('\n');
         buf.append("compiled from\t\t").append(source_file_name).append('\n');
         buf.append("compiler version\t").append(major).append(".").append(minor).append('\n');
         buf.append("access flags\t\t").append(super.getAccessFlags()).append('\n');
@@ -716,7 +726,7 @@
                       boolean innerClassAttributeRefersToMe = false;
                       String inner_class_name = constant_pool.getConstantString(innerClasse.getInnerClassIndex(),
                                  Const.CONSTANT_Class);
-                      inner_class_name = Utility.compactClassName(inner_class_name);
+                      inner_class_name = Utility.compactClassName(inner_class_name, false);
                       if (inner_class_name.equals(getClassName())) {
                           innerClassAttributeRefersToMe = true;
                       }
@@ -754,7 +764,7 @@
      * Sets the ClassRepository which loaded the JavaClass.
      * Should be called immediately after parsing is done.
      */
-    public void setRepository(final com.sun.org.apache.bcel.internal.util.Repository repository) {
+    public void setRepository( final com.sun.org.apache.bcel.internal.util.Repository repository ) { // TODO make protected?
         this.repository = repository;
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumber.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumber.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
  * the source that corresponds to a relative address in the byte code. This
  * is used for debugging purposes.
  *
- * @version $Id$
  * @see     LineNumberTable
  */
 public final class LineNumber implements Cloneable, Node {
@@ -55,7 +54,7 @@
      * Construct object from file stream.
      *
      * @param file Input stream
-     * @throws IOEXception if an I/O Exception occurs in readUnsignedShort
+     * @throws IOException if an I/O Exception occurs in readUnsignedShort
      */
     LineNumber(final DataInput file) throws IOException {
         this(file.readUnsignedShort(), file.readUnsignedShort());
@@ -89,9 +88,9 @@
      * Dump line number/pc pair to file stream in binary format.
      *
      * @param file Output file stream
-     * @throws IOEXception if an I/O Exception occurs in writeShort
+     * @throws IOException if an I/O Exception occurs in writeShort
      */
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeShort(start_pc);
         file.writeShort(line_number);
     }
@@ -100,7 +99,7 @@
     /**
      * @return Corresponding source line
      */
-    public final int getLineNumber() {
+    public int getLineNumber() {
         return 0xffff & line_number;
     }
 
@@ -108,7 +107,7 @@
     /**
      * @return PC in code
      */
-    public final int getStartPC() {
+    public int getStartPC() {
         return  0xffff & start_pc;
     }
 
@@ -116,7 +115,7 @@
     /**
      * @param line_number the source line number
      */
-    public final void setLineNumber( final int line_number ) {
+    public void setLineNumber( final int line_number ) {
         this.line_number = (short) line_number;
     }
 
@@ -124,7 +123,7 @@
     /**
      * @param start_pc the pc for this line number
      */
-    public final void setStartPC( final int start_pc ) {
+    public void setStartPC( final int start_pc ) {
         this.start_pc = (short) start_pc;
     }
 
@@ -133,7 +132,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return "LineNumber(" + start_pc + ", " + line_number + ")";
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,10 +30,9 @@
  * purposes. This attribute is used by the <em>Code</em> attribute. It
  * contains pairs of PCs and line numbers.
  *
- * @version $Id$
  * @see     Code
  * @see LineNumber
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public final class LineNumberTable extends Attribute {
 
@@ -68,7 +67,7 @@
      * @param length Content length in bytes
      * @param input Input stream
      * @param constant_pool Array of constants
-     * @throws IOEXception if an I/O Exception occurs in readUnsignedShort
+     * @throws IOException if an I/O Exception occurs in readUnsignedShort
      */
     LineNumberTable(final int name_index, final int length, final DataInput input, final ConstantPool constant_pool)
             throws IOException {
@@ -96,10 +95,10 @@
      * Dump line number table attribute to file stream in binary format.
      *
      * @param file Output file stream
-     * @throws IOEXception if an I/O Exception occurs in writeShort
+     * @throws IOException if an I/O Exception occurs in writeShort
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(line_number_table.length);
         for (final LineNumber lineNumber : line_number_table) {
@@ -110,14 +109,14 @@
     /**
      * @return Array of (pc offset, line number) pairs.
      */
-    public final LineNumber[] getLineNumberTable() {
+    public LineNumber[] getLineNumberTable() {
         return line_number_table;
     }
 
     /**
      * @param line_number_table the line number entries for this table
      */
-    public final void setLineNumberTable( final LineNumber[] line_number_table ) {
+    public void setLineNumberTable( final LineNumber[] line_number_table ) {
         this.line_number_table = line_number_table;
     }
 
@@ -125,7 +124,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final StringBuilder buf = new StringBuilder();
         final StringBuilder line = new StringBuilder();
 
@@ -161,7 +160,7 @@
         /* Do a binary search since the array is ordered.
          */
         do {
-            final int i = (l + r) / 2;
+            final int i = (l + r) >>> 1;
             final int j = line_number_table[i].getStartPC();
             if (j == pos) {
                 return line_number_table[i].getLineNumber();
@@ -204,7 +203,7 @@
         return c;
     }
 
-    public final int getTableLength() {
+    public int getTableLength() {
         return line_number_table == null ? 0 : line_number_table.length;
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java	Tue Jan 21 23:33:18 2020 +0000
@@ -28,19 +28,27 @@
 
 /**
  * This class represents a local variable within a method. It contains its
- * scope, name, signature and index on the method's frame.
+ * scope, name, signature and index on the method's frame.  It is used both
+ * to represent an element of the LocalVariableTable as well as an element
+ * of the LocalVariableTypeTable.  The nomenclature used here may be a bit confusing;
+ * while the two items have the same layout in a class file, a LocalVariableTable
+ * attribute contains a descriptor_index, not a signature_index.  The
+ * LocalVariableTypeTable attribute does have a signature_index.
+ * @see com.sun.org.apache.bcel.internal.classfile.Utility for more details on the difference.
  *
- * @version $Id$
  * @see     LocalVariableTable
- * @LastModified: Jun 2019
+ * @see     LocalVariableTypeTable
+ * @LastModified: Jan 2020
  */
 public final class LocalVariable implements Cloneable, Node {
 
     private int start_pc; // Range in which the variable is valid
     private int length;
     private int name_index; // Index in constant pool of variable name
+    // Technically, a decscriptor_index for a local variable table entry
+    // and a signature_index for a local variable type table entry.
     private int signature_index; // Index of variable signature
-    private int index; /* Variable is `index'th local variable on
+    private int index; /* Variable is index'th local variable on
      * this method's frame.
      */
     private ConstantPool constant_pool;
@@ -48,18 +56,19 @@
 
 
     /**
-     * Initialize from another object. Note that both objects use the same
+     * Initializes from another LocalVariable. Note that both objects use the same
      * references (shallow copy). Use copy() for a physical copy.
+     *
+     * @param localVariable Another LocalVariable.
      */
-    public LocalVariable(final LocalVariable c) {
-        this(c.getStartPC(), c.getLength(), c.getNameIndex(), c.getSignatureIndex(), c.getIndex(),
-                c.getConstantPool());
-        this.orig_index = c.getOrigIndex();
+    public LocalVariable(final LocalVariable localVariable) {
+        this(localVariable.getStartPC(), localVariable.getLength(), localVariable.getNameIndex(),
+                localVariable.getSignatureIndex(), localVariable.getIndex(), localVariable.getConstantPool());
+        this.orig_index = localVariable.getOrigIndex();
     }
 
-
     /**
-     * Construct object from file stream.
+     * Constructs object from file stream.
      * @param file Input stream
      * @throws IOException
      */
@@ -124,24 +133,24 @@
 
 
     /**
-     * Dump local variable to file stream in binary format.
+     * Dumps local variable to file stream in binary format.
      *
-     * @param file Output file stream
-     * @throws IOException
+     * @param dataOutputStream Output file stream
+     * @exception IOException if an I/O error occurs.
+     * @see java.io.FilterOutputStream#out
      */
-    public final void dump( final DataOutputStream file ) throws IOException {
-        file.writeShort(start_pc);
-        file.writeShort(length);
-        file.writeShort(name_index);
-        file.writeShort(signature_index);
-        file.writeShort(index);
+    public void dump(final DataOutputStream dataOutputStream) throws IOException {
+        dataOutputStream.writeShort(start_pc);
+        dataOutputStream.writeShort(length);
+        dataOutputStream.writeShort(name_index);
+        dataOutputStream.writeShort(signature_index);
+        dataOutputStream.writeShort(index);
     }
 
-
     /**
      * @return Constant pool used by this object.
      */
-    public final ConstantPool getConstantPool() {
+    public ConstantPool getConstantPool() {
         return constant_pool;
     }
 
@@ -149,7 +158,7 @@
     /**
      * @return Variable is valid within getStartPC() .. getStartPC()+getLength()
      */
-    public final int getLength() {
+    public int getLength() {
         return length;
     }
 
@@ -157,7 +166,7 @@
     /**
      * @return Variable name.
      */
-    public final String getName() {
+    public String getName() {
         ConstantUtf8 c;
         c = (ConstantUtf8) constant_pool.getConstant(name_index, Const.CONSTANT_Utf8);
         return c.getBytes();
@@ -167,7 +176,7 @@
     /**
      * @return Index in constant pool of variable name.
      */
-    public final int getNameIndex() {
+    public int getNameIndex() {
         return name_index;
     }
 
@@ -175,7 +184,7 @@
     /**
      * @return Signature.
      */
-    public final String getSignature() {
+    public String getSignature() {
         ConstantUtf8 c;
         c = (ConstantUtf8) constant_pool.getConstant(signature_index, Const.CONSTANT_Utf8);
         return c.getBytes();
@@ -185,7 +194,7 @@
     /**
      * @return Index in constant pool of variable signature.
      */
-    public final int getSignatureIndex() {
+    public int getSignatureIndex() {
         return signature_index;
     }
 
@@ -193,7 +202,7 @@
     /**
      * @return index of register where variable is stored
      */
-    public final int getIndex() {
+    public int getIndex() {
         return index;
     }
 
@@ -201,15 +210,15 @@
     /**
      * @return index of register where variable was originally stored
      */
-    public final int getOrigIndex() {
+    public int getOrigIndex() {
         return orig_index;
     }
 
 
     /**
-     * @return Start of range where he variable is valid
+     * @return Start of range where the variable is valid
      */
-    public final int getStartPC() {
+    public int getStartPC() {
         return start_pc;
     }
 
@@ -217,7 +226,7 @@
     /*
      * Helper method shared with LocalVariableTypeTable
      */
-    final String toStringShared( final boolean typeTable ) {
+    String toStringShared( final boolean typeTable ) {
         final String name = getName();
         final String signature = Utility.signatureToString(getSignature(), false);
         final String label = "LocalVariable" + (typeTable ? "Types" : "" );
@@ -229,7 +238,7 @@
     /**
      * @param constant_pool Constant pool to be used for this object.
      */
-    public final void setConstantPool( final ConstantPool constant_pool ) {
+    public void setConstantPool( final ConstantPool constant_pool ) {
         this.constant_pool = constant_pool;
     }
 
@@ -237,7 +246,7 @@
     /**
      * @param length the length of this local variable
      */
-    public final void setLength( final int length ) {
+    public void setLength( final int length ) {
         this.length = length;
     }
 
@@ -245,7 +254,7 @@
     /**
      * @param name_index the index into the constant pool for the name of this variable
      */
-    public final void setNameIndex( final int name_index ) { // TODO unused
+    public void setNameIndex( final int name_index ) { // TODO unused
         this.name_index = name_index;
     }
 
@@ -253,7 +262,7 @@
     /**
      * @param signature_index the index into the constant pool for the signature of this variable
      */
-    public final void setSignatureIndex( final int signature_index ) { // TODO unused
+    public void setSignatureIndex( final int signature_index ) { // TODO unused
         this.signature_index = signature_index;
     }
 
@@ -261,7 +270,7 @@
     /**
      * @param index the index in the local variable table of this variable
      */
-    public final void setIndex( final int index ) { // TODO unused
+    public void setIndex( final int index ) { // TODO unused
         this.index = index;
     }
 
@@ -269,7 +278,7 @@
     /**
      * @param start_pc Specify range where the local variable is valid.
      */
-    public final void setStartPC( final int start_pc ) { // TODO unused
+    public void setStartPC( final int start_pc ) { // TODO unused
         this.start_pc = start_pc;
     }
 
@@ -278,7 +287,7 @@
      * @return string representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return toStringShared(false);
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * This class represents colection of local variables in a
  * method. This attribute is contained in the <em>Code</em> attribute.
  *
- * @version $Id$
  * @see     Code
  * @see LocalVariable
  */
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Method.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Method.java	Tue Jan 21 23:33:18 2020 +0000
@@ -33,7 +33,6 @@
  * for a method in the class. See JVM specification for details.
  * A method has access flags, a name, a signature and a number of attributes.
  *
- * @version $Id$
  */
 public final class Method extends FieldOrMethod {
 
@@ -116,7 +115,7 @@
     /**
      * @return Code attribute of method, if any
      */
-    public final Code getCode() {
+    public Code getCode() {
         for (final Attribute attribute : super.getAttributes()) {
             if (attribute instanceof Code) {
                 return (Code) attribute;
@@ -130,7 +129,7 @@
      * @return ExceptionTable attribute of method, if any, i.e., list all
      * exceptions the method may throw not exception handlers!
      */
-    public final ExceptionTable getExceptionTable() {
+    public ExceptionTable getExceptionTable() {
         for (final Attribute attribute : super.getAttributes()) {
             if (attribute instanceof ExceptionTable) {
                 return (ExceptionTable) attribute;
@@ -143,7 +142,7 @@
     /** @return LocalVariableTable of code attribute if any, i.e. the call is forwarded
      * to the Code atribute.
      */
-    public final LocalVariableTable getLocalVariableTable() {
+    public LocalVariableTable getLocalVariableTable() {
         final Code code = getCode();
         if (code == null) {
             return null;
@@ -155,7 +154,7 @@
     /** @return LineNumberTable of code attribute if any, i.e. the call is forwarded
      * to the Code atribute.
      */
-    public final LineNumberTable getLineNumberTable() {
+    public LineNumberTable getLineNumberTable() {
         final Code code = getCode();
         if (code == null) {
             return null;
@@ -171,7 +170,7 @@
      * @return String representation of the method.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final String access = Utility.accessToString(super.getAccessFlags());
         // Get name and signature from constant pool
         ConstantUtf8 c = (ConstantUtf8) super.getConstantPool().getConstant(super.getSignatureIndex(), Const.CONSTANT_Utf8);
@@ -200,7 +199,7 @@
     /**
      * @return deep copy of this method
      */
-    public final Method copy( final ConstantPool _constant_pool ) {
+    public Method copy( final ConstantPool _constant_pool ) {
         return (Method) copy_(_constant_pool);
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/MethodParameter.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/MethodParameter.java	Tue Jan 21 23:33:18 2020 +0000
@@ -95,6 +95,10 @@
         return (access_flags & Const.ACC_MANDATED) != 0;
     }
 
+    public void accept(final Visitor v) {
+        v.visitMethodParameter(this);
+    }
+
     /**
      * Dump object to file stream on binary format.
      *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Module.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,261 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class is derived from <em>Attribute</em> and represents the list of modules required, exported, opened or provided by a module.
+ * There may be at most one Module attribute in a ClassFile structure.
+ *
+ * @see   Attribute
+ * @since 6.4.0
+ */
+public final class Module extends Attribute {
+
+    private final int module_name_index;
+    private final int module_flags;
+    private final int module_version_index;
+
+    private ModuleRequires[] requires_table;
+    private ModuleExports[] exports_table;
+    private ModuleOpens[] opens_table;
+    private final int uses_count;
+    private final int[] uses_index;
+    private ModuleProvides[] provides_table;
+
+    /**
+     * Construct object from input stream.
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param input Input stream
+     * @param constant_pool Array of constants
+     * @throws IOException
+     */
+    Module(final int name_index, final int length, final DataInput input, final ConstantPool constant_pool) throws IOException {
+        super(Const.ATTR_MODULE, name_index, length, constant_pool);
+
+        module_name_index = input.readUnsignedShort();
+        module_flags = input.readUnsignedShort();
+        module_version_index = input.readUnsignedShort();
+
+        final int requires_count = input.readUnsignedShort();
+        requires_table = new ModuleRequires[requires_count];
+        for (int i = 0; i < requires_count; i++) {
+            requires_table[i] = new ModuleRequires(input);
+        }
+
+        final int exports_count = input.readUnsignedShort();
+        exports_table = new ModuleExports[exports_count];
+        for (int i = 0; i < exports_count; i++) {
+            exports_table[i] = new ModuleExports(input);
+        }
+
+        final int opens_count = input.readUnsignedShort();
+        opens_table = new ModuleOpens[opens_count];
+        for (int i = 0; i < opens_count; i++) {
+            opens_table[i] = new ModuleOpens(input);
+        }
+
+        uses_count = input.readUnsignedShort();
+        uses_index = new int[uses_count];
+        for (int i = 0; i < uses_count; i++) {
+            uses_index[i] = input.readUnsignedShort();
+        }
+
+        final int provides_count = input.readUnsignedShort();
+        provides_table = new ModuleProvides[provides_count];
+        for (int i = 0; i < provides_count; i++) {
+            provides_table[i] = new ModuleProvides(input);
+        }
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitModule(this);
+    }
+
+    // TODO add more getters and setters?
+
+    /**
+     * @return table of required modules
+     * @see ModuleRequires
+     */
+    public ModuleRequires[] getRequiresTable() {
+        return requires_table;
+    }
+
+
+    /**
+     * @return table of exported interfaces
+     * @see ModuleExports
+     */
+    public ModuleExports[] getExportsTable() {
+        return exports_table;
+    }
+
+
+    /**
+     * @return table of provided interfaces
+     * @see ModuleOpens
+     */
+    public ModuleOpens[] getOpensTable() {
+        return opens_table;
+    }
+
+
+    /**
+     * @return table of provided interfaces
+     * @see ModuleProvides
+     */
+    public ModuleProvides[] getProvidesTable() {
+        return provides_table;
+    }
+
+
+    /**
+     * Dump Module attribute to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException
+     */
+    @Override
+    public void dump( final DataOutputStream file ) throws IOException {
+        super.dump(file);
+
+        file.writeShort(module_name_index);
+        file.writeShort(module_flags);
+        file.writeShort(module_version_index);
+
+        file.writeShort(requires_table.length);
+        for (final ModuleRequires entry : requires_table) {
+            entry.dump(file);
+        }
+
+        file.writeShort(exports_table.length);
+        for (final ModuleExports entry : exports_table) {
+            entry.dump(file);
+        }
+
+        file.writeShort(opens_table.length);
+        for (final ModuleOpens entry : opens_table) {
+            entry.dump(file);
+        }
+
+        file.writeShort(uses_index.length);
+        for (final int entry : uses_index) {
+            file.writeShort(entry);
+        }
+
+        file.writeShort(provides_table.length);
+        for (final ModuleProvides entry : provides_table) {
+            entry.dump(file);
+        }
+    }
+
+
+    /**
+     * @return String representation, i.e., a list of packages.
+     */
+    @Override
+    public String toString() {
+        final ConstantPool cp = super.getConstantPool();
+        final StringBuilder buf = new StringBuilder();
+        buf.append("Module:\n");
+        buf.append("  name:    ") .append(cp.getConstantString(module_name_index, Const.CONSTANT_Module).replace('/', '.')).append("\n");
+        buf.append("  flags:   ") .append(String.format("%04x", module_flags)).append("\n");
+        final String version = module_version_index == 0 ? "0" : cp.getConstantString(module_version_index, Const.CONSTANT_Utf8);
+        buf.append("  version: ") .append(version).append("\n");
+
+        buf.append("  requires(").append(requires_table.length).append("):\n");
+        for (final ModuleRequires module : requires_table) {
+            buf.append("    ").append(module.toString(cp)).append("\n");
+        }
+
+        buf.append("  exports(").append(exports_table.length).append("):\n");
+        for (final ModuleExports module : exports_table) {
+            buf.append("    ").append(module.toString(cp)).append("\n");
+        }
+
+        buf.append("  opens(").append(opens_table.length).append("):\n");
+        for (final ModuleOpens module : opens_table) {
+            buf.append("    ").append(module.toString(cp)).append("\n");
+        }
+
+        buf.append("  uses(").append(uses_index.length).append("):\n");
+        for (final int index : uses_index) {
+            final String class_name = cp.getConstantString(index, Const.CONSTANT_Class);
+            buf.append("    ").append(Utility.compactClassName(class_name, false)).append("\n");
+        }
+
+        buf.append("  provides(").append(provides_table.length).append("):\n");
+        for (final ModuleProvides module : provides_table) {
+            buf.append("    ").append(module.toString(cp)).append("\n");
+        }
+
+        return buf.substring(0, buf.length()-1); // remove the last newline
+    }
+
+
+    /**
+     * @return deep copy of this attribute
+     */
+    @Override
+    public Attribute copy( final ConstantPool _constant_pool ) {
+        final Module c = (Module) clone();
+
+        c.requires_table = new ModuleRequires[requires_table.length];
+        for (int i = 0; i < requires_table.length; i++) {
+            c.requires_table[i] = requires_table[i].copy();
+        }
+
+        c.exports_table = new ModuleExports[exports_table.length];
+        for (int i = 0; i < exports_table.length; i++) {
+            c.exports_table[i] = exports_table[i].copy();
+        }
+
+        c.opens_table = new ModuleOpens[opens_table.length];
+        for (int i = 0; i < opens_table.length; i++) {
+            c.opens_table[i] = opens_table[i].copy();
+        }
+
+        c.provides_table = new ModuleProvides[provides_table.length];
+        for (int i = 0; i < provides_table.length; i++) {
+            c.provides_table[i] = provides_table[i].copy();
+        }
+
+        c.setConstantPool(_constant_pool);
+        return c;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleExports.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,129 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class represents an entry in the exports table of the Module attribute.
+ * Each entry describes a package which may open the parent module.
+ *
+ * @see   Module
+ * @since 6.4.0
+ */
+public final class ModuleExports implements Cloneable, Node {
+
+    private final int exports_index;  // points to CONSTANT_Package_info
+    private final int exports_flags;
+    private final int exports_to_count;
+    private final int[] exports_to_index;  // points to CONSTANT_Module_info
+
+
+    /**
+     * Construct object from file stream.
+     *
+     * @param file Input stream
+     * @throws IOException if an I/O Exception occurs in readUnsignedShort
+     */
+    ModuleExports(final DataInput file) throws IOException {
+        exports_index = file.readUnsignedShort();
+        exports_flags = file.readUnsignedShort();
+        exports_to_count = file.readUnsignedShort();
+        exports_to_index = new int[exports_to_count];
+        for (int i = 0; i < exports_to_count; i++) {
+            exports_to_index[i] = file.readUnsignedShort();
+        }
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitModuleExports(this);
+    }
+
+    // TODO add more getters and setters?
+
+    /**
+     * Dump table entry to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException if an I/O Exception occurs in writeShort
+     */
+    public void dump( final DataOutputStream file ) throws IOException {
+        file.writeShort(exports_index);
+        file.writeShort(exports_flags);
+        file.writeShort(exports_to_count);
+        for (final int entry : exports_to_index) {
+            file.writeShort(entry);
+        }
+    }
+
+
+    /**
+     * @return String representation
+     */
+    @Override
+    public String toString() {
+        return "exports(" + exports_index + ", " + exports_flags + ", " + exports_to_count + ", ...)";
+    }
+
+
+    /**
+     * @return Resolved string representation
+     */
+    public String toString( final ConstantPool constant_pool ) {
+        final StringBuilder buf = new StringBuilder();
+        final String package_name = constant_pool.constantToString(exports_index, Const.CONSTANT_Package);
+        buf.append(Utility.compactClassName(package_name, false));
+        buf.append(", ").append(String.format("%04x", exports_flags));
+        buf.append(", to(").append(exports_to_count).append("):\n");
+        for (final int index : exports_to_index) {
+            final String module_name = constant_pool.getConstantString(index, Const.CONSTANT_Module);
+            buf.append("      ").append(Utility.compactClassName(module_name, false)).append("\n");
+        }
+        return buf.substring(0, buf.length()-1); // remove the last newline
+    }
+
+
+    /**
+     * @return deep copy of this object
+     */
+    public ModuleExports copy() {
+        try {
+            return (ModuleExports) clone();
+        } catch (final CloneNotSupportedException e) {
+            // TODO should this throw?
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleMainClass.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,141 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class is derived from <em>Attribute</em> and indicates the main class of a module.
+ * There may be at most one ModuleMainClass attribute in a ClassFile structure.
+ *
+ * @see     Attribute
+ */
+public final class ModuleMainClass extends Attribute {
+
+    private int main_class_index;
+
+
+    /**
+     * Initialize from another object. Note that both objects use the same
+     * references (shallow copy). Use copy() for a physical copy.
+     */
+    public ModuleMainClass(final ModuleMainClass c) {
+        this(c.getNameIndex(), c.getLength(), c.getHostClassIndex(), c.getConstantPool());
+    }
+
+
+    /**
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param main_class_index Host class index
+     * @param constant_pool Array of constants
+     */
+    public ModuleMainClass(final int name_index, final int length, final int main_class_index,
+            final ConstantPool constant_pool) {
+        super(Const.ATTR_NEST_MEMBERS, name_index, length, constant_pool);
+        this.main_class_index = main_class_index;
+    }
+
+
+    /**
+     * Construct object from input stream.
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param input Input stream
+     * @param constant_pool Array of constants
+     * @throws IOException
+     */
+    ModuleMainClass(final int name_index, final int length, final DataInput input, final ConstantPool constant_pool) throws IOException {
+        this(name_index, length, 0, constant_pool);
+        main_class_index = input.readUnsignedShort();
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitly
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitModuleMainClass(this);
+    }
+
+
+    /**
+     * Dump ModuleMainClass attribute to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException if an I/O error occurs.
+     */
+    @Override
+    public void dump( final DataOutputStream file ) throws IOException {
+        super.dump(file);
+        file.writeShort(main_class_index);
+    }
+
+
+    /**
+     * @return index into constant pool of host class name.
+     */
+    public int getHostClassIndex() {
+        return main_class_index;
+    }
+
+
+    /**
+     * @param main_class_index the host class index
+     */
+    public void setHostClassIndex( final int main_class_index ) {
+        this.main_class_index = main_class_index;
+    }
+
+
+    /**
+     * @return String representation
+     */
+    @Override
+    public String toString() {
+        final StringBuilder buf = new StringBuilder();
+        buf.append("ModuleMainClass: ");
+        final String class_name = super.getConstantPool().getConstantString(main_class_index, Const.CONSTANT_Class);
+        buf.append(Utility.compactClassName(class_name, false));
+        return buf.toString();
+    }
+
+
+    /**
+     * @return deep copy of this attribute
+     */
+    @Override
+    public Attribute copy( final ConstantPool _constant_pool ) {
+        final ModuleMainClass c = (ModuleMainClass) clone();
+        c.setConstantPool(_constant_pool);
+        return c;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleOpens.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,129 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class represents an entry in the opens table of the Module attribute.
+ * Each entry describes a package which the parent module opens.
+ *
+ * @see   Module
+ * @since 6.4.0
+ */
+public final class ModuleOpens implements Cloneable, Node {
+
+    private final int opens_index;  // points to CONSTANT_Package_info
+    private final int opens_flags;
+    private final int opens_to_count;
+    private final int[] opens_to_index;  // points to CONSTANT_Module_info
+
+
+    /**
+     * Construct object from file stream.
+     *
+     * @param file Input stream
+     * @throws IOException if an I/O Exception occurs in readUnsignedShort
+     */
+    ModuleOpens(final DataInput file) throws IOException {
+        opens_index = file.readUnsignedShort();
+        opens_flags = file.readUnsignedShort();
+        opens_to_count = file.readUnsignedShort();
+        opens_to_index = new int[opens_to_count];
+        for (int i = 0; i < opens_to_count; i++) {
+            opens_to_index[i] = file.readUnsignedShort();
+        }
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitModuleOpens(this);
+    }
+
+    // TODO add more getters and setters?
+
+    /**
+     * Dump table entry to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException if an I/O Exception occurs in writeShort
+     */
+    public void dump( final DataOutputStream file ) throws IOException {
+        file.writeShort(opens_index);
+        file.writeShort(opens_flags);
+        file.writeShort(opens_to_count);
+        for (final int entry : opens_to_index) {
+            file.writeShort(entry);
+        }
+    }
+
+
+    /**
+     * @return String representation
+     */
+    @Override
+    public String toString() {
+        return "opens(" + opens_index + ", " + opens_flags + ", " + opens_to_count + ", ...)";
+    }
+
+
+    /**
+     * @return Resolved string representation
+     */
+    public String toString( final ConstantPool constant_pool ) {
+        final StringBuilder buf = new StringBuilder();
+        final String package_name = constant_pool.constantToString(opens_index, Const.CONSTANT_Package);
+        buf.append(Utility.compactClassName(package_name, false));
+        buf.append(", ").append(String.format("%04x", opens_flags));
+        buf.append(", to(").append(opens_to_count).append("):\n");
+        for (final int index : opens_to_index) {
+            final String module_name = constant_pool.getConstantString(index, Const.CONSTANT_Module);
+            buf.append("      ").append(Utility.compactClassName(module_name, false)).append("\n");
+        }
+        return buf.substring(0, buf.length()-1); // remove the last newline
+    }
+
+
+    /**
+     * @return deep copy of this object
+     */
+    public ModuleOpens copy() {
+        try {
+            return (ModuleOpens) clone();
+        } catch (final CloneNotSupportedException e) {
+            // TODO should this throw?
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModulePackages.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,179 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class is derived from <em>Attribute</em> and represents the list of packages that are exported or opened by the Module attribute.
+ * There may be at most one ModulePackages attribute in a ClassFile structure.
+ *
+ * @see     Attribute
+ */
+public final class ModulePackages extends Attribute {
+
+    private int[] package_index_table;
+
+
+    /**
+     * Initialize from another object. Note that both objects use the same
+     * references (shallow copy). Use copy() for a physical copy.
+     */
+    public ModulePackages(final ModulePackages c) {
+        this(c.getNameIndex(), c.getLength(), c.getPackageIndexTable(), c.getConstantPool());
+    }
+
+
+    /**
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param package_index_table Table of indices in constant pool
+     * @param constant_pool Array of constants
+     */
+    public ModulePackages(final int name_index, final int length, final int[] package_index_table,
+            final ConstantPool constant_pool) {
+        super(Const.ATTR_MODULE_PACKAGES, name_index, length, constant_pool);
+        this.package_index_table = package_index_table != null ? package_index_table : new int[0];
+    }
+
+
+    /**
+     * Construct object from input stream.
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param input Input stream
+     * @param constant_pool Array of constants
+     * @throws IOException
+     */
+    ModulePackages(final int name_index, final int length, final DataInput input, final ConstantPool constant_pool) throws IOException {
+        this(name_index, length, (int[]) null, constant_pool);
+        final int number_of_packages = input.readUnsignedShort();
+        package_index_table = new int[number_of_packages];
+        for (int i = 0; i < number_of_packages; i++) {
+            package_index_table[i] = input.readUnsignedShort();
+        }
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitModulePackages(this);
+    }
+
+
+    /**
+     * Dump ModulePackages attribute to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException
+     */
+    @Override
+    public void dump( final DataOutputStream file ) throws IOException {
+        super.dump(file);
+        file.writeShort(package_index_table.length);
+        for (final int index : package_index_table) {
+            file.writeShort(index);
+        }
+    }
+
+
+    /**
+     * @return array of indices into constant pool of package names.
+     */
+    public int[] getPackageIndexTable() {
+        return package_index_table;
+    }
+
+
+    /**
+     * @return Length of package table.
+     */
+    public int getNumberOfPackages() {
+        return package_index_table == null ? 0 : package_index_table.length;
+    }
+
+
+    /**
+     * @return string array of package names
+     */
+    public String[] getPackageNames() {
+        final String[] names = new String[package_index_table.length];
+        for (int i = 0; i < package_index_table.length; i++) {
+            names[i] = super.getConstantPool().getConstantString(package_index_table[i],
+                    Const.CONSTANT_Package).replace('/', '.');
+        }
+        return names;
+    }
+
+
+    /**
+     * @param package_index_table the list of package indexes
+     * Also redefines number_of_packages according to table length.
+     */
+    public void setPackageIndexTable( final int[] package_index_table ) {
+        this.package_index_table = package_index_table != null ? package_index_table : new int[0];
+    }
+
+
+    /**
+     * @return String representation, i.e., a list of packages.
+     */
+    @Override
+    public String toString() {
+        final StringBuilder buf = new StringBuilder();
+        buf.append("ModulePackages(");
+        buf.append(package_index_table.length);
+        buf.append("):\n");
+        for (final int index : package_index_table) {
+            final String package_name = super.getConstantPool().getConstantString(index, Const.CONSTANT_Package);
+            buf.append("  ").append(Utility.compactClassName(package_name, false)).append("\n");
+        }
+        return buf.substring(0, buf.length()-1); // remove the last newline
+    }
+
+
+    /**
+     * @return deep copy of this attribute
+     */
+    @Override
+    public Attribute copy( final ConstantPool _constant_pool ) {
+        final ModulePackages c = (ModulePackages) clone();
+        if (package_index_table != null) {
+            c.package_index_table = new int[package_index_table.length];
+            System.arraycopy(package_index_table, 0, c.package_index_table, 0,
+                    package_index_table.length);
+        }
+        c.setConstantPool(_constant_pool);
+        return c;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleProvides.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,125 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class represents an entry in the provides table of the Module attribute.
+ * Each entry describes a service implementation that the parent module provides.
+ *
+ * @see   Module
+ * @since 6.4.0
+ */
+public final class ModuleProvides implements Cloneable, Node {
+
+    private final int provides_index;  // points to CONSTANT_Class_info
+    private final int provides_with_count;
+    private final int[] provides_with_index;  // points to CONSTANT_Class_info
+
+
+    /**
+     * Construct object from file stream.
+     *
+     * @param file Input stream
+     * @throws IOException if an I/O Exception occurs in readUnsignedShort
+     */
+    ModuleProvides(final DataInput file) throws IOException {
+        provides_index = file.readUnsignedShort();
+        provides_with_count = file.readUnsignedShort();
+        provides_with_index = new int[provides_with_count];
+        for (int i = 0; i < provides_with_count; i++) {
+            provides_with_index[i] = file.readUnsignedShort();
+        }
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitModuleProvides(this);
+    }
+
+    // TODO add more getters and setters?
+
+    /**
+     * Dump table entry to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException if an I/O Exception occurs in writeShort
+     */
+    public void dump( final DataOutputStream file ) throws IOException {
+        file.writeShort(provides_index);
+        file.writeShort(provides_with_count);
+        for (final int entry : provides_with_index) {
+            file.writeShort(entry);
+        }
+    }
+
+
+    /**
+     * @return String representation
+     */
+    @Override
+    public String toString() {
+        return "provides(" + provides_index + ", " + provides_with_count + ", ...)";
+    }
+
+
+    /**
+     * @return Resolved string representation
+     */
+    public String toString( final ConstantPool constant_pool ) {
+        final StringBuilder buf = new StringBuilder();
+        final String interface_name = constant_pool.constantToString(provides_index, Const.CONSTANT_Class);
+        buf.append(Utility.compactClassName(interface_name, false));
+        buf.append(", with(").append(provides_with_count).append("):\n");
+        for (final int index : provides_with_index) {
+            final String class_name = constant_pool.getConstantString(index, Const.CONSTANT_Class);
+            buf.append("      ").append(Utility.compactClassName(class_name, false)).append("\n");
+        }
+        return buf.substring(0, buf.length()-1); // remove the last newline
+    }
+
+
+    /**
+     * @return deep copy of this object
+     */
+    public ModuleProvides copy() {
+        try {
+            return (ModuleProvides) clone();
+        } catch (final CloneNotSupportedException e) {
+            // TODO should this throw?
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ModuleRequires.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,118 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class represents an entry in the requires table of the Module attribute.
+ * Each entry describes a module on which the parent module depends.
+ *
+ * @see   Module
+ * @since 6.4.0
+ */
+public final class ModuleRequires implements Cloneable, Node {
+
+    private final int requires_index;  // points to CONSTANT_Module_info
+    private final int requires_flags;
+    private final int requires_version_index;  // either 0 or points to CONSTANT_Utf8_info
+
+
+    /**
+     * Construct object from file stream.
+     *
+     * @param file Input stream
+     * @throws IOException if an I/O Exception occurs in readUnsignedShort
+     */
+    ModuleRequires(final DataInput file) throws IOException {
+        requires_index = file.readUnsignedShort();
+        requires_flags = file.readUnsignedShort();
+        requires_version_index = file.readUnsignedShort();
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitModuleRequires(this);
+    }
+
+    // TODO add more getters and setters?
+
+    /**
+     * Dump table entry to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException if an I/O Exception occurs in writeShort
+     */
+    public void dump( final DataOutputStream file ) throws IOException {
+        file.writeShort(requires_index);
+        file.writeShort(requires_flags);
+        file.writeShort(requires_version_index);
+    }
+
+
+    /**
+     * @return String representation
+     */
+    @Override
+    public String toString() {
+        return "requires(" + requires_index + ", " + String.format("%04x", requires_flags) + ", " + requires_version_index + ")";
+    }
+
+
+    /**
+     * @return Resolved string representation
+     */
+    public String toString( final ConstantPool constant_pool ) {
+        final StringBuilder buf = new StringBuilder();
+        final String module_name = constant_pool.constantToString(requires_index, Const.CONSTANT_Module);
+        buf.append(Utility.compactClassName(module_name, false));
+        buf.append(", ").append(String.format("%04x", requires_flags));
+        final String version = requires_version_index == 0 ? "0" : constant_pool.getConstantString(requires_version_index, Const.CONSTANT_Utf8);
+        buf.append(", ").append(version);
+        return buf.toString();
+    }
+
+
+    /**
+     * @return deep copy of this object
+     */
+    public ModuleRequires copy() {
+        try {
+            return (ModuleRequires) clone();
+        } catch (final CloneNotSupportedException e) {
+            // TODO should this throw?
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/NestHost.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,142 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class is derived from <em>Attribute</em> and records the nest host of the nest
+ * to which the current class or interface claims to belong.
+ * There may be at most one NestHost attribute in a ClassFile structure.
+ *
+ * @see     Attribute
+ */
+public final class NestHost extends Attribute {
+
+    private int host_class_index;
+
+
+    /**
+     * Initializes from another object. Note that both objects use the same
+     * references (shallow copy). Use copy() for a physical copy.
+     */
+    public NestHost(final NestHost c) {
+        this(c.getNameIndex(), c.getLength(), c.getHostClassIndex(), c.getConstantPool());
+    }
+
+
+    /**
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param host_class_index Host class index
+     * @param constant_pool Array of constants
+     */
+    public NestHost(final int name_index, final int length, final int host_class_index,
+            final ConstantPool constant_pool) {
+        super(Const.ATTR_NEST_MEMBERS, name_index, length, constant_pool);
+        this.host_class_index = host_class_index;
+    }
+
+
+    /**
+     * Constructs object from input stream.
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param input Input stream
+     * @param constant_pool Array of constants
+     * @throws IOException
+     */
+    NestHost(final int name_index, final int length, final DataInput input, final ConstantPool constant_pool) throws IOException {
+        this(name_index, length, 0, constant_pool);
+        host_class_index = input.readUnsignedShort();
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitNestHost(this);
+    }
+
+
+    /**
+     * Dumps NestHost attribute to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException if an I/O error occurs.
+     */
+    @Override
+    public void dump( final DataOutputStream file ) throws IOException {
+        super.dump(file);
+        file.writeShort(host_class_index);
+    }
+
+
+    /**
+     * @return index into constant pool of host class name.
+     */
+    public int getHostClassIndex() {
+        return host_class_index;
+    }
+
+
+    /**
+     * @param host_class_index the host class index
+     */
+    public void setHostClassIndex( final int host_class_index ) {
+        this.host_class_index = host_class_index;
+    }
+
+
+    /**
+     * @return String representation
+     */
+    @Override
+    public String toString() {
+        final StringBuilder buf = new StringBuilder();
+        buf.append("NestHost: ");
+        final String class_name = super.getConstantPool().getConstantString(host_class_index, Const.CONSTANT_Class);
+        buf.append(Utility.compactClassName(class_name, false));
+        return buf.toString();
+    }
+
+
+    /**
+     * @return deep copy of this attribute
+     */
+    @Override
+    public Attribute copy( final ConstantPool _constant_pool ) {
+        final NestHost c = (NestHost) clone();
+        c.setConstantPool(_constant_pool);
+        return c;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/NestMembers.java	Tue Jan 21 23:33:18 2020 +0000
@@ -0,0 +1,180 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * 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.
+ */
+
+package com.sun.org.apache.bcel.internal.classfile;
+
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Const;
+
+/**
+ * This class is derived from <em>Attribute</em> and records the classes and interfaces that
+ * are authorized to claim membership in the nest hosted by the current class or interface.
+ * There may be at most one NestMembers attribute in a ClassFile structure.
+ *
+ * @see     Attribute
+ */
+public final class NestMembers extends Attribute {
+
+    private int[] classes;
+
+
+    /**
+     * Initialize from another object. Note that both objects use the same
+     * references (shallow copy). Use copy() for a physical copy.
+     */
+    public NestMembers(final NestMembers c) {
+        this(c.getNameIndex(), c.getLength(), c.getClasses(), c.getConstantPool());
+    }
+
+
+    /**
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param classes Table of indices in constant pool
+     * @param constant_pool Array of constants
+     */
+    public NestMembers(final int name_index, final int length, final int[] classes,
+            final ConstantPool constant_pool) {
+        super(Const.ATTR_NEST_MEMBERS, name_index, length, constant_pool);
+        this.classes = classes != null ? classes : new int[0];
+    }
+
+
+    /**
+     * Construct object from input stream.
+     * @param name_index Index in constant pool
+     * @param length Content length in bytes
+     * @param input Input stream
+     * @param constant_pool Array of constants
+     * @throws IOException
+     */
+    NestMembers(final int name_index, final int length, final DataInput input, final ConstantPool constant_pool) throws IOException {
+        this(name_index, length, (int[]) null, constant_pool);
+        final int number_of_classes = input.readUnsignedShort();
+        classes = new int[number_of_classes];
+        for (int i = 0; i < number_of_classes; i++) {
+            classes[i] = input.readUnsignedShort();
+        }
+    }
+
+
+    /**
+     * Called by objects that are traversing the nodes of the tree implicitely
+     * defined by the contents of a Java class. I.e., the hierarchy of methods,
+     * fields, attributes, etc. spawns a tree of objects.
+     *
+     * @param v Visitor object
+     */
+    @Override
+    public void accept( final Visitor v ) {
+        v.visitNestMembers(this);
+    }
+
+
+    /**
+     * Dump NestMembers attribute to file stream in binary format.
+     *
+     * @param file Output file stream
+     * @throws IOException
+     */
+    @Override
+    public void dump( final DataOutputStream file ) throws IOException {
+        super.dump(file);
+        file.writeShort(classes.length);
+        for (final int index : classes) {
+            file.writeShort(index);
+        }
+    }
+
+
+    /**
+     * @return array of indices into constant pool of class names.
+     */
+    public int[] getClasses() {
+        return classes;
+    }
+
+
+    /**
+     * @return Length of classes table.
+     */
+    public int getNumberClasses() {
+        return classes == null ? 0 : classes.length;
+    }
+
+
+    /**
+     * @return string array of class names
+     */
+    public String[] getClassNames() {
+        final String[] names = new String[classes.length];
+        for (int i = 0; i < classes.length; i++) {
+            names[i] = super.getConstantPool().getConstantString(classes[i],
+                    Const.CONSTANT_Class).replace('/', '.');
+        }
+        return names;
+    }
+
+
+    /**
+     * @param classes the list of class indexes
+     * Also redefines number_of_classes according to table length.
+     */
+    public void setClasses( final int[] classes ) {
+        this.classes = classes != null ? classes : new int[0];
+    }
+
+
+    /**
+     * @return String representation, i.e., a list of classes.
+     */
+    @Override
+    public String toString() {
+        final StringBuilder buf = new StringBuilder();
+        buf.append("NestMembers(");
+        buf.append(classes.length);
+        buf.append("):\n");
+        for (final int index : classes) {
+            final String class_name = super.getConstantPool().getConstantString(index, Const.CONSTANT_Class);
+            buf.append("  ").append(Utility.compactClassName(class_name, false)).append("\n");
+        }
+        return buf.substring(0, buf.length()-1); // remove the last newline
+    }
+
+
+    /**
+     * @return deep copy of this attribute
+     */
+    @Override
+    public Attribute copy( final ConstantPool _constant_pool ) {
+        final NestMembers c = (NestMembers) clone();
+        if (classes != null) {
+            c.classes = new int[classes.length];
+            System.arraycopy(classes, 0, c.classes, 0,
+                    classes.length);
+        }
+        c.setConstantPool(_constant_pool);
+        return c;
+    }
+}
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Node.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Node.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * Denote class to have an accept method();
  *
- * @version $Id$
  */
 public interface Node {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/PMGClass.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/PMGClass.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * This class is derived from <em>Attribute</em> and represents a reference
  * to a PMG attribute.
  *
- * @version $Id$
  * @see     Attribute
  */
 public final class PMGClass extends Attribute {
@@ -88,7 +87,7 @@
      */
     @Override
     public void accept( final Visitor v ) {
-        System.err.println("Visiting non-standard PMGClass object");
+        println("Visiting non-standard PMGClass object");
     }
 
 
@@ -99,7 +98,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(pmg_index);
         file.writeShort(pmg_class_index);
@@ -109,7 +108,7 @@
     /**
      * @return Index in constant pool of source file name.
      */
-    public final int getPMGClassIndex() {
+    public int getPMGClassIndex() {
         return pmg_class_index;
     }
 
@@ -117,7 +116,7 @@
     /**
      * @param pmg_class_index
      */
-    public final void setPMGClassIndex( final int pmg_class_index ) {
+    public void setPMGClassIndex( final int pmg_class_index ) {
         this.pmg_class_index = pmg_class_index;
     }
 
@@ -125,7 +124,7 @@
     /**
      * @return Index in constant pool of source file name.
      */
-    public final int getPMGIndex() {
+    public int getPMGIndex() {
         return pmg_index;
     }
 
@@ -133,7 +132,7 @@
     /**
      * @param pmg_index
      */
-    public final void setPMGIndex( final int pmg_index ) {
+    public void setPMGIndex( final int pmg_index ) {
         this.pmg_index = pmg_index;
     }
 
@@ -141,7 +140,7 @@
     /**
      * @return PMG name.
      */
-    public final String getPMGName() {
+    public String getPMGName() {
         final ConstantUtf8 c = (ConstantUtf8) super.getConstantPool().getConstant(pmg_index,
                 Const.CONSTANT_Utf8);
         return c.getBytes();
@@ -151,7 +150,7 @@
     /**
      * @return PMG class name.
      */
-    public final String getPMGClassName() {
+    public String getPMGClassName() {
         final ConstantUtf8 c = (ConstantUtf8) super.getConstantPool().getConstant(pmg_class_index,
                 Const.CONSTANT_Utf8);
         return c.getBytes();
@@ -162,7 +161,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return "PMGClass(" + getPMGName() + ", " + getPMGClassName() + ")";
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ParameterAnnotationEntry.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ParameterAnnotationEntry.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
 /**
  * represents one parameter annotation in the parameter annotation table
  *
- * @version $Id: ParameterAnnotationEntry
  * @since 6.0
  */
 public class ParameterAnnotationEntry implements Node {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ParameterAnnotations.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ParameterAnnotations.java	Tue Jan 21 23:33:18 2020 +0000
@@ -28,7 +28,6 @@
 /**
  * base class for parameter annotations
  *
- * @version $Id: ParameterAnnotations
  * @since 6.0
  */
 public abstract class ParameterAnnotations extends Attribute {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeInvisibleAnnotations.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeInvisibleAnnotations.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * represents an annotation that is represented in the class file but is not
  * provided to the JVM.
  *
- * @version $Id: RuntimeInvisibleAnnotations
  * @since 6.0
  */
 public class RuntimeInvisibleAnnotations extends Annotations
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeInvisibleParameterAnnotations.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeInvisibleParameterAnnotations.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
  * Represents a parameter annotation that is represented in the class file
  * but is not provided to the JVM.
  *
- * @version $Id: RuntimeInvisibleParameterAnnotations
  * @since 6.0
  */
 public class RuntimeInvisibleParameterAnnotations extends ParameterAnnotations {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeVisibleAnnotations.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeVisibleAnnotations.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * represents an annotation that is represented in the class file and is
  * provided to the JVM.
  *
- * @version $Id: RuntimeVisibleAnnotations
  * @since 6.0
  */
 public class RuntimeVisibleAnnotations extends Annotations
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeVisibleParameterAnnotations.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/RuntimeVisibleParameterAnnotations.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
  * Represents a parameter annotation that is represented in the class file
  * and is provided to the JVM.
  *
- * @version $Id: RuntimeVisibleParameterAnnotations
  * @since 6.0
  */
 public class RuntimeVisibleParameterAnnotations extends ParameterAnnotations {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Signature.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Signature.java	Tue Jan 21 23:33:18 2020 +0000
@@ -32,7 +32,6 @@
  * This class is derived from <em>Attribute</em> and represents a reference
  * to a GJ attribute.
  *
- * @version $Id$
  * @see     Attribute
  */
 public final class Signature extends Attribute {
@@ -96,7 +95,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(signature_index);
     }
@@ -105,7 +104,7 @@
     /**
      * @return Index in constant pool of source file name.
      */
-    public final int getSignatureIndex() {
+    public int getSignatureIndex() {
         return signature_index;
     }
 
@@ -113,7 +112,7 @@
     /**
      * @param signature_index the index info the constant pool of this signature
      */
-    public final void setSignatureIndex( final int signature_index ) {
+    public void setSignatureIndex( final int signature_index ) {
         this.signature_index = signature_index;
     }
 
@@ -121,7 +120,7 @@
     /**
      * @return GJ signature.
      */
-    public final String getSignature() {
+    public String getSignature() {
         final ConstantUtf8 c = (ConstantUtf8) super.getConstantPool().getConstant(signature_index,
                 Const.CONSTANT_Utf8);
         return c.getBytes();
@@ -137,12 +136,12 @@
         }
 
 
-        final String getData() {
+        String getData() {
             return new String(buf);
         }
 
 
-        final void unread() {
+        void unread() {
             if (pos > 0) {
                 pos--;
             }
@@ -258,7 +257,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final String s = getSignature();
         return "Signature: " + s;
     }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/SourceFile.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/SourceFile.java	Tue Jan 21 23:33:18 2020 +0000
@@ -33,7 +33,6 @@
  * should appear per classfile.  The intention of this class is that it is
  * instantiated from the <em>Attribute.readAttribute()</em> method.
  *
- * @version $Id$
  * @see     Attribute
  */
 public final class SourceFile extends Attribute {
@@ -103,7 +102,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(sourcefile_index);
     }
@@ -112,7 +111,7 @@
     /**
      * @return Index in constant pool of source file name.
      */
-    public final int getSourceFileIndex() {
+    public int getSourceFileIndex() {
         return sourcefile_index;
     }
 
@@ -120,7 +119,7 @@
     /**
      * @param sourcefile_index
      */
-    public final void setSourceFileIndex( final int sourcefile_index ) {
+    public void setSourceFileIndex( final int sourcefile_index ) {
         this.sourcefile_index = sourcefile_index;
     }
 
@@ -128,7 +127,7 @@
     /**
      * @return Source file name.
      */
-    public final String getSourceFileName() {
+    public String getSourceFileName() {
         final ConstantUtf8 c = (ConstantUtf8) super.getConstantPool().getConstant(sourcefile_index,
                 Const.CONSTANT_Utf8);
         return c.getBytes();
@@ -139,7 +138,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return "SourceFile: " + getSourceFileName();
     }
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMap.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMap.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,13 +30,12 @@
 /**
  * This class represents a stack map attribute used for
  * preverification of Java classes for the <a
- * href="http://java.sun.com/j2me/"> Java 2 Micro Edition</a>
- * (J2ME). This attribute is used by the <a
- * href="http://java.sun.com/products/cldc/">KVM</a> and contained
- * within the Code attribute of a method. See CLDC specification
+ * href="https://www.oracle.com/java/technologies/javameoverview.html">Java Platform, Micro Edition</a>
+ * (Java ME). This attribute is used by the <a
+ * href="https://www.oracle.com/technetwork/java/embedded/javame/java-mobile/kvmwp-150240.pdf">KVM</a>
+ * and contained within the Code attribute of a method. See CLDC specification
  * 5.3.1.2
  *
- * @version $Id$
  * @see     Code
  * @see     StackMapEntry
  * @see     StackMapType
@@ -84,7 +83,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         file.writeShort(map.length);
         for (final StackMapEntry entry : map) {
@@ -96,7 +95,7 @@
     /**
      * @return Array of stack map entries
      */
-    public final StackMapEntry[] getStackMap() {
+    public StackMapEntry[] getStackMap() {
         return map;
     }
 
@@ -104,7 +103,7 @@
     /**
      * @param map Array of stack map entries
      */
-    public final void setStackMap( final StackMapEntry[] map ) {
+    public void setStackMap( final StackMapEntry[] map ) {
         this.map = map;
         int len = 2; // Length of 'number_of_entries' field prior to the array of stack maps
         for (final StackMapEntry element : map) {
@@ -118,7 +117,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final StringBuilder buf = new StringBuilder("StackMap(");
         for (int i = 0; i < map.length; i++) {
             buf.append(map[i]);
@@ -159,7 +158,7 @@
     }
 
 
-    public final int getMapLength() {
+    public int getMapLength() {
         return map == null ? 0 : map.length;
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * local variables and the the of stack items at a given byte code offset.
  * See CLDC specification 5.3.1.2
  *
- * @version $Id$
  * @see     StackMap
  * @see     StackMapType
  */
@@ -142,7 +141,7 @@
      * @param file Output file stream
      * @throws IOException
      */
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.write(frame_type);
         if (frame_type >= Const.SAME_FRAME && frame_type <= Const.SAME_FRAME_MAX) {
             // nothing to be done
@@ -182,7 +181,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final StringBuilder buf = new StringBuilder(64);
         buf.append("(");
         if (frame_type >= Const.SAME_FRAME && frame_type <= Const.SAME_FRAME_MAX) {
@@ -426,7 +425,7 @@
     /**
      * @return Constant pool used by this object.
      */
-    public final ConstantPool getConstantPool() {
+    public ConstantPool getConstantPool() {
         return constant_pool;
     }
 
@@ -434,7 +433,7 @@
     /**
      * @param constant_pool Constant pool to be used for this object.
      */
-    public final void setConstantPool( final ConstantPool constant_pool ) {
+    public void setConstantPool( final ConstantPool constant_pool ) {
         this.constant_pool = constant_pool;
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapType.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapType.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * This class represents the type of a local variable or item on stack
  * used in the StackMap entries.
  *
- * @version $Id$
  * @see     StackMapEntry
  * @see     StackMap
  * @see     Const
@@ -103,7 +102,7 @@
      * @param file Output file stream
      * @throws IOException
      */
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         file.writeByte(type);
         if (hasIndex()) {
             file.writeShort(getIndex());
@@ -113,7 +112,7 @@
 
     /** @return true, if type is either ITEM_Object or ITEM_NewObject
      */
-    public final boolean hasIndex() {
+    public boolean hasIndex() {
         return type == Const.ITEM_Object || type == Const.ITEM_NewObject;
     }
 
@@ -136,7 +135,7 @@
      * @return String representation
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return "(type=" + Const.getItemName(type) + printIndex() + ")";
     }
 
@@ -157,7 +156,7 @@
     /**
      * @return Constant pool used by this object.
      */
-    public final ConstantPool getConstantPool() {
+    public ConstantPool getConstantPool() {
         return constant_pool;
     }
 
@@ -165,7 +164,7 @@
     /**
      * @param constant_pool Constant pool to be used for this object.
      */
-    public final void setConstantPool( final ConstantPool constant_pool ) {
+    public void setConstantPool( final ConstantPool constant_pool ) {
         this.constant_pool = constant_pool;
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Synthetic.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Synthetic.java	Tue Jan 21 23:33:18 2020 +0000
@@ -36,7 +36,6 @@
  * is intended to be instantiated from the
  * <em>Attribute.readAttribute()</em> method.
  *
- * @version $Id$
  * @see     Attribute
  */
 public final class Synthetic extends Attribute {
@@ -82,7 +81,7 @@
         if (length > 0) {
             bytes = new byte[length];
             input.readFully(bytes);
-            System.err.println("Synthetic attribute with length > 0");
+            println("Synthetic attribute with length > 0");
         }
     }
 
@@ -107,7 +106,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         if (super.getLength() > 0) {
             file.write(bytes, 0, super.getLength());
@@ -118,7 +117,7 @@
     /**
      * @return data bytes.
      */
-    public final byte[] getBytes() {
+    public byte[] getBytes() {
         return bytes;
     }
 
@@ -126,7 +125,7 @@
     /**
      * @param bytes
      */
-    public final void setBytes( final byte[] bytes ) {
+    public void setBytes( final byte[] bytes ) {
         this.bytes = bytes;
     }
 
@@ -135,7 +134,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         final StringBuilder buf = new StringBuilder("Synthetic");
         if (super.getLength() > 0) {
             buf.append(" ").append(Utility.toHexString(bytes));
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Unknown.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Unknown.java	Tue Jan 21 23:33:18 2020 +0000
@@ -38,7 +38,6 @@
  * {@link Attribute#addAttributeReader(String, UnknownAttributeReader)}.
 
  *
- * @version $Id$
  * @see Attribute
  * @see UnknownAttributeReader
  */
@@ -124,7 +123,7 @@
      * @throws IOException
      */
     @Override
-    public final void dump( final DataOutputStream file ) throws IOException {
+    public void dump( final DataOutputStream file ) throws IOException {
         super.dump(file);
         if (super.getLength() > 0) {
             file.write(bytes, 0, super.getLength());
@@ -135,7 +134,7 @@
     /**
      * @return data bytes.
      */
-    public final byte[] getBytes() {
+    public byte[] getBytes() {
         return bytes;
     }
 
@@ -144,7 +143,7 @@
      * @return name of attribute.
      */
     @Override
-    public final String getName() {
+    public String getName() {
         return name;
     }
 
@@ -152,7 +151,7 @@
     /**
      * @param bytes the bytes to set
      */
-    public final void setBytes( final byte[] bytes ) {
+    public void setBytes( final byte[] bytes ) {
         this.bytes = bytes;
     }
 
@@ -161,7 +160,7 @@
      * @return String representation.
      */
     @Override
-    public final String toString() {
+    public String toString() {
         if (super.getLength() == 0 || bytes == null) {
             return "(Unknown attribute " + name + ")";
         }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/UnknownAttributeReader.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/UnknownAttributeReader.java	Tue Jan 21 23:33:18 2020 +0000
@@ -27,7 +27,6 @@
  * method. These factory objects should implement this interface.
  *
  * @see Attribute
- * @version $Id$
  * @since 6.0
  */
 public interface UnknownAttributeReader {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Utility.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Utility.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -42,8 +42,7 @@
 /**
  * Utility functions that do not really belong to any class in particular.
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 // @since 6.0 methods are no longer final
 public abstract class Utility {
@@ -52,23 +51,23 @@
         return tl.get();
     }
 
-
     private static void wrap( final ThreadLocal<Integer> tl, final int value ) {
         tl.set(value);
     }
 
+    /* How many chars have been consumed
+     * during parsing in typeSignatureToString().
+     * Read by methodSignatureToString().
+     * Set by side effect, but only internally.
+     */
     private static ThreadLocal<Integer> consumed_chars = new ThreadLocal<Integer>() {
-
         @Override
         protected Integer initialValue() {
             return 0;
         }
-    };/* How many chars have been consumed
-     * during parsing in signatureToString().
-     * Read by methodSignatureToString().
-     * Set by side effect,but only internally.
-     */
-    private static boolean wide = false; /* The `WIDE' instruction is used in the
+    };
+
+    /* The `WIDE' instruction is used in the
      * byte code to allow 16-bit wide indices
      * for local variables. This opcode
      * precedes an `ILOAD', e.g.. The opcode
@@ -77,6 +76,7 @@
      * following byte to form a
      * 16-bit value.
      */
+    private static boolean wide = false;
 
 
     /**
@@ -105,7 +105,7 @@
     public static String accessToString( final int access_flags, final boolean for_class ) {
         final StringBuilder buf = new StringBuilder();
         int p = 0;
-        for (int i = 0; p < Const.MAX_ACC_FLAG; i++) { // Loop through known flags
+        for (int i = 0; p < Const.MAX_ACC_FLAG_I; i++) { // Loop through known flags
             p = pow2(i);
             if ((access_flags & p) != 0) {
                 /* Special case: Classes compiled with new compilers and with the
@@ -470,6 +470,21 @@
 
 
     /**
+     * Shorten long class names, <em>java/lang/String</em> becomes
+     * <em>java.lang.String</em>,
+     * e.g.. If <em>chopit</em> is <em>true</em> the prefix <em>java.lang</em>
+     * is also removed.
+     *
+     * @param str The long class name
+     * @param chopit flag that determines whether chopping is executed or not
+     * @return Compacted class name
+     */
+    public static String compactClassName( final String str, final boolean chopit ) {
+        return compactClassName(str, "java.lang.", chopit);
+    }
+
+
+    /**
      * Shorten long class name <em>str</em>, i.e., chop off the <em>prefix</em>,
      * if the
      * class name starts with this string and the flag <em>chopit</em> is true.
@@ -477,7 +492,7 @@
      *
      * @param str The long class name
      * @param prefix The prefix the get rid off
-     * @param chopit Flag that determines whether chopping is executed or not
+     * @param chopit flag that determines whether chopping is executed or not
      * @return Compacted class name
      */
     public static String compactClassName( String str, final String prefix, final boolean chopit ) {
@@ -494,21 +509,6 @@
 
 
     /**
-     * Shorten long class names, <em>java/lang/String</em> becomes
-     * <em>java.lang.String</em>,
-     * e.g.. If <em>chopit</em> is <em>true</em> the prefix <em>java.lang</em>
-     * is also removed.
-     *
-     * @param str The long class name
-     * @param chopit Flag that determines whether chopping is executed or not
-     * @return Compacted class name
-     */
-    public static String compactClassName( final String str, final boolean chopit ) {
-        return compactClassName(str, "java.lang.", chopit);
-    }
-
-
-    /**
      * @return `flag' with bit `i' set to 1
      */
     public static int setBit( final int flag, final int i ) {
@@ -563,9 +563,11 @@
 
 
     /**
+     * Converts argument list portion of method signature to string with all class names compacted.
+     *
      * @param  signature    Method signature
-     * @return Array of argument types
-     * @throws  ClassFormatException
+     * @return String Array of argument types
+     * @throws ClassFormatException
      */
     public static String[] methodSignatureArgumentTypes( final String signature )
             throws ClassFormatException {
@@ -574,22 +576,25 @@
 
 
     /**
+     * Converts argument list portion of method signature to string.
+     *
      * @param  signature    Method signature
-     * @param chopit Shorten class names ?
-     * @return Array of argument types
-     * @throws  ClassFormatException
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @return String Array of argument types
+     * @throws ClassFormatException
      */
     public static String[] methodSignatureArgumentTypes( final String signature, final boolean chopit )
             throws ClassFormatException {
         final List<String> vec = new ArrayList<>();
         int index;
-        try { // Read all declarations between for `(' and `)'
-            if (signature.charAt(0) != '(') {
+        try {
+            // Skip any type arguments to read argument declarations between `(' and `)'
+            index = signature.indexOf('(') + 1;
+            if (index <= 0) {
                 throw new ClassFormatException("Invalid method signature: " + signature);
             }
-            index = 1; // current string position
             while (signature.charAt(index) != ')') {
-                vec.add(signatureToString(signature.substring(index), chopit));
+                vec.add(typeSignatureToString(signature.substring(index), chopit));
                 //corrected concurrent private static field acess
                 index += unwrap(consumed_chars); // update position
             }
@@ -601,9 +606,11 @@
 
 
     /**
+     * Converts return type portion of method signature to string with all class names compacted.
+     *
      * @param  signature    Method signature
-     * @return return type of method
-     * @throws  ClassFormatException
+     * @return String representation of method return type
+     * @throws ClassFormatException
      */
     public static String methodSignatureReturnType( final String signature ) throws ClassFormatException {
         return methodSignatureReturnType(signature, true);
@@ -611,10 +618,12 @@
 
 
     /**
+     * Converts return type portion of method signature to string.
+     *
      * @param  signature    Method signature
-     * @param chopit Shorten class names ?
-     * @return return type of method
-     * @throws  ClassFormatException
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @return String representation of method return type
+     * @throws ClassFormatException
      */
     public static String methodSignatureReturnType( final String signature, final boolean chopit ) throws ClassFormatException {
         int index;
@@ -622,7 +631,10 @@
         try {
             // Read return type after `)'
             index = signature.lastIndexOf(')') + 1;
-            type = signatureToString(signature.substring(index), chopit);
+            if (index <= 0) {
+                throw new ClassFormatException("Invalid method signature: " + signature);
+            }
+            type = typeSignatureToString(signature.substring(index), chopit);
         } catch (final StringIndexOutOfBoundsException e) { // Should never occur
             throw new ClassFormatException("Invalid method signature: " + signature, e);
         }
@@ -633,9 +645,9 @@
     /**
      * Converts method signature to string with all class names compacted.
      *
-     * @param signature to convert
-     * @param name of method
-     * @param access flags of method
+     * @param  signature to convert
+     * @param  name of method
+     * @param  access flags of method
      * @return Human readable signature
      */
     public static String methodSignatureToString( final String signature, final String name, final String access ) {
@@ -643,45 +655,32 @@
     }
 
 
+    /**
+     * Converts method signature to string.
+     *
+     * @param  signature to convert
+     * @param  name of method
+     * @param  access flags of method
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @return Human readable signature
+     */
     public static String methodSignatureToString( final String signature, final String name, final String access, final boolean chopit ) {
         return methodSignatureToString(signature, name, access, chopit, null);
     }
 
 
     /**
-     * A returntype signature represents the return value from a method.
-     * It is a series of bytes in the following grammar:
-     *
-     * <pre>
-     * &lt;return_signature&gt; ::= &lt;field_type&gt; | V
-     * </pre>
-     *
-     * The character V indicates that the method returns no value. Otherwise, the
-     * signature indicates the type of the return value.
-     * An argument signature represents an argument passed to a method:
-     *
-     * <pre>
-     * &lt;argument_signature&gt; ::= &lt;field_type&gt;
-     * </pre>
-     *
-     * A method signature represents the arguments that the method expects, and
-     * the value that it returns.
-     * <pre>
-     * &lt;method_signature&gt; ::= (&lt;arguments_signature&gt;) &lt;return_signature&gt;
-     * &lt;arguments_signature&gt;::= &lt;argument_signature&gt;*
-     * </pre>
-     *
-     * This method converts such a string into a Java type declaration like
+     * This method converts a method signature string into a Java type declaration like
      * `void main(String[])' and throws a `ClassFormatException' when the parsed
      * type is invalid.
      *
      * @param  signature    Method signature
      * @param  name         Method name
      * @param  access       Method access rights
-     * @param chopit
-     * @param vars
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @param  vars the LocalVariableTable for the method
      * @return Java type declaration
-     * @throws  ClassFormatException
+     * @throws ClassFormatException
      */
     public static String methodSignatureToString( final String signature, final String name,
             final String access, final boolean chopit, final LocalVariableTable vars ) throws ClassFormatException {
@@ -689,13 +688,14 @@
         String type;
         int index;
         int var_index = access.contains("static") ? 0 : 1;
-        try { // Read all declarations between for `(' and `)'
-            if (signature.charAt(0) != '(') {
+        try {
+            // Skip any type arguments to read argument declarations between `(' and `)'
+            index = signature.indexOf('(') + 1;
+            if (index <= 0) {
                 throw new ClassFormatException("Invalid method signature: " + signature);
             }
-            index = 1; // current string position
             while (signature.charAt(index) != ')') {
-                final String param_type = signatureToString(signature.substring(index), chopit);
+                final String param_type = typeSignatureToString(signature.substring(index), chopit);
                 buf.append(param_type);
                 if (vars != null) {
                     final LocalVariable l = vars.getLocalVariable(var_index, 0);
@@ -716,10 +716,11 @@
             }
             index++; // update position
             // Read return type after `)'
-            type = signatureToString(signature.substring(index), chopit);
+            type = typeSignatureToString(signature.substring(index), chopit);
         } catch (final StringIndexOutOfBoundsException e) { // Should never occur
             throw new ClassFormatException("Invalid method signature: " + signature, e);
         }
+        // ignore any throws information in the signature
         if (buf.length() > 1) {
             buf.setLength(buf.length() - 2);
         }
@@ -729,7 +730,6 @@
     }
 
 
-    // Guess what this does
     private static int pow2( final int n ) {
         return 1 << n;
     }
@@ -767,10 +767,40 @@
 
 
     /**
-     * Converts signature to string with all class names compacted.
+     * WARNING:
      *
-     * @param signature to convert
-     * @return Human readable signature
+     * There is some nomenclature confusion through much of the BCEL code base with
+     * respect to the terms Descriptor and Signature.  For the offical definitions see:
+     *
+     * @see <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3">
+     * Descriptors in The Java Virtual Machine Specification</a>
+     *
+     * @see <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.9.1">
+     * Signatures in The Java Virtual Machine Specification</a>
+     *
+     * In brief, a descriptor is a string representing the type of a field or method.
+     * Signatures are similar, but more complex.  Signatures are used to encode declarations
+     * written in the Java programming language that use types outside the type system of the
+     * Java Virtual Machine.  They are used to describe the type of any class, interface,
+     * constructor, method or field whose declaration uses type variables or parameterized types.
+     *
+     * To parse a descriptor, call typeSignatureToString.
+     * To parse a signature, call signatureToString.
+     *
+     * Note that if the signature string is a single, non-generic item, the call to
+     * signatureToString reduces to a call to typeSignatureToString.
+     * Also note, that if you only wish to parse the first item in a longer signature
+     * string, you should call typeSignatureToString directly.
+     */
+
+
+    /**
+     * Converts a signature to a string with all class names compacted.
+     * Class, Method and Type signatures are supported.
+     * Enum and Interface signatures are not supported.
+     *
+     * @param  signature signature to convert
+     * @return String containg human readable signature
      */
     public static String signatureToString( final String signature ) {
         return signatureToString(signature, true);
@@ -778,40 +808,158 @@
 
 
     /**
-     * The field signature represents the value of an argument to a function or
-     * the value of a variable. It is a series of bytes generated by the
-     * following grammar:
+     * Converts a signature to a string.
+     * Class, Method and Type signatures are supported.
+     * Enum and Interface signatures are not supported.
      *
-     * <PRE>
-     * &lt;field_signature&gt; ::= &lt;field_type&gt;
-     * &lt;field_type&gt;      ::= &lt;base_type&gt;|&lt;object_type&gt;|&lt;array_type&gt;
-     * &lt;base_type&gt;       ::= B|C|D|F|I|J|S|Z
-     * &lt;object_type&gt;     ::= L&lt;fullclassname&gt;;
-     * &lt;array_type&gt;      ::= [&lt;field_type&gt;
-     *
-     * The meaning of the base types is as follows:
-     * B byte signed byte
-     * C char character
-     * D double double precision IEEE float
-     * F float single precision IEEE float
-     * I int integer
-     * J long long integer
-     * L&lt;fullclassname&gt;; ... an object of the given class
-     * S short signed short
-     * Z boolean true or false
-     * [&lt;field sig&gt; ... array
-     * </PRE>
-     *
-     * This method converts this string into a Java type declaration such as
-     * `String[]' and throws a `ClassFormatException' when the parsed type is
-     * invalid.
-     *
-     * @param  signature  Class signature
-     * @param chopit Flag that determines whether chopping is executed or not
-     * @return Java type declaration
-     * @throws ClassFormatException
+     * @param  signature signature to convert
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @return String containg human readable signature
      */
     public static String signatureToString( final String signature, final boolean chopit ) {
+        String type = "";
+        String typeParams = "";
+        int index = 0;
+        if (signature.charAt(0) == '<') {
+            // we have type paramters
+            typeParams = typeParamTypesToString(signature, chopit);
+            index += unwrap(consumed_chars); // update position
+        }
+        if (signature.charAt(index) == '(') {
+            // We have a Method signature.
+            // add types of arguments
+            type = typeParams + typeSignaturesToString(signature.substring(index), chopit, ')');
+            index += unwrap(consumed_chars); // update position
+            // add return type
+            type = type + typeSignatureToString(signature.substring(index), chopit);
+            index += unwrap(consumed_chars); // update position
+            // ignore any throws information in the signature
+            return type;
+        } else {
+            // Could be Class or Type...
+            type = typeSignatureToString(signature.substring(index), chopit);
+            index += unwrap(consumed_chars); // update position
+            if ((typeParams.length() == 0) && (index == signature.length())) {
+                // We have a Type signature.
+                return type;
+            }
+            // We have a Class signature.
+            final StringBuilder typeClass = new StringBuilder(typeParams);
+            typeClass.append(" extends ");
+            typeClass.append(type);
+            if (index < signature.length()) {
+                typeClass.append(" implements ");
+                typeClass.append(typeSignatureToString(signature.substring(index), chopit));
+                index += unwrap(consumed_chars); // update position
+            }
+            while (index < signature.length()) {
+                typeClass.append(", ");
+                typeClass.append(typeSignatureToString(signature.substring(index), chopit));
+                index += unwrap(consumed_chars); // update position
+            }
+            return typeClass.toString();
+        }
+    }
+
+
+    /**
+     * Converts a type parameter list signature to a string.
+     *
+     * @param  signature signature to convert
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @return String containg human readable signature
+     */
+    private static String typeParamTypesToString( final String signature, final boolean chopit ) {
+        // The first character is guranteed to be '<'
+        final StringBuilder typeParams = new StringBuilder("<");
+        int index = 1;  // skip the '<'
+        // get the first TypeParameter
+        typeParams.append(typeParamTypeToString(signature.substring(index), chopit));
+        index += unwrap(consumed_chars); // update position
+        // are there more TypeParameters?
+        while (signature.charAt(index) != '>') {
+            typeParams.append(", ");
+            typeParams.append(typeParamTypeToString(signature.substring(index), chopit));
+            index += unwrap(consumed_chars); // update position
+        }
+        wrap(consumed_chars, index + 1); // account for the '>' char
+        return typeParams.append(">").toString();
+    }
+
+
+    /**
+     * Converts a type parameter signature to a string.
+     *
+     * @param  signature signature to convert
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @return String containg human readable signature
+     */
+    private static String typeParamTypeToString( final String signature, final boolean chopit ) {
+        int index = signature.indexOf(':');
+        if (index <= 0) {
+            throw new ClassFormatException("Invalid type parameter signature: " + signature);
+        }
+        // get the TypeParameter identifier
+        final StringBuilder typeParam = new StringBuilder(signature.substring(0, index));
+        index++;  // account for the ':'
+        if (signature.charAt(index) != ':') {
+            // we have a class bound
+            typeParam.append(" extends ");
+            typeParam.append(typeSignatureToString(signature.substring(index), chopit));
+            index += unwrap(consumed_chars); // update position
+        }
+        // look for interface bounds
+        while (signature.charAt(index) == ':') {
+            index++;  // skip over the ':'
+            typeParam.append(" & ");
+            typeParam.append(typeSignatureToString(signature.substring(index), chopit));
+            index += unwrap(consumed_chars); // update position
+        }
+        wrap(consumed_chars, index);
+        return typeParam.toString();
+    }
+
+
+    /**
+     * Converts a list of type signatures to a string.
+     *
+     * @param  signature signature to convert
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @param  term character indicating the end of the list
+     * @return String containg human readable signature
+     */
+    private static String typeSignaturesToString( final String signature, final boolean chopit, final char term ) {
+        // The first character will be an 'open' that matches the 'close' contained in term.
+        final StringBuilder typeList = new StringBuilder(signature.substring(0, 1));
+        int index = 1;  // skip the 'open' character
+        // get the first Type in the list
+        if (signature.charAt(index) != term) {
+            typeList.append(typeSignatureToString(signature.substring(index), chopit));
+            index += unwrap(consumed_chars); // update position
+        }
+        // are there more types in the list?
+        while (signature.charAt(index) != term) {
+            typeList.append(", ");
+            typeList.append(typeSignatureToString(signature.substring(index), chopit));
+            index += unwrap(consumed_chars); // update position
+        }
+        wrap(consumed_chars, index + 1); // account for the term char
+        return typeList.append(term).toString();
+    }
+
+
+    /**
+     *
+     * This method converts a type signature string into a Java type declaration such as
+     * `String[]' and throws a `ClassFormatException' when the parsed type is invalid.
+     *
+     * @param  signature type signature
+     * @param  chopit flag that determines whether chopping is executed or not
+     * @return string containing human readable type signature
+     * @throws ClassFormatException
+     * @since 6.4.0
+     */
+    public static String typeSignatureToString( final String signature, final boolean chopit ) throws ClassFormatException {
         //corrected concurrent private static field acess
         wrap(consumed_chars, 1); // This is the default, read just one char like `B'
         try {
@@ -831,7 +979,7 @@
                 case 'T': { // TypeVariableSignature
                     final int index = signature.indexOf(';'); // Look for closing `;'
                     if (index < 0) {
-                        throw new ClassFormatException("Invalid signature: " + signature);
+                        throw new ClassFormatException("Invalid type variable signature: " + signature);
                     }
                     //corrected concurrent private static field acess
                     wrap(consumed_chars, index + 1); // "Tblabla;" `T' and `;' are removed
@@ -891,7 +1039,7 @@
                         type.append("?");
                         consumed_chars++;
                     } else {
-                        type.append(signatureToString(signature.substring(consumed_chars), chopit));
+                        type.append(typeSignatureToString(signature.substring(consumed_chars), chopit));
                         // update our consumed count by the number of characters the for type argument
                         consumed_chars = unwrap(Utility.consumed_chars) + consumed_chars;
                         wrap(Utility.consumed_chars, consumed_chars);
@@ -912,7 +1060,7 @@
                             type.append("?");
                             consumed_chars++;
                         } else {
-                            type.append(signatureToString(signature.substring(consumed_chars), chopit));
+                            type.append(typeSignatureToString(signature.substring(consumed_chars), chopit));
                             // update our consumed count by the number of characters the for type argument
                             consumed_chars = unwrap(Utility.consumed_chars) + consumed_chars;
                             wrap(Utility.consumed_chars, consumed_chars);
@@ -928,7 +1076,7 @@
                         type.append(".");
                         // convert SimpleClassTypeSignature to fake ClassTypeSignature
                         // and then recurse to parse it
-                        type.append(signatureToString("L" + signature.substring(consumed_chars+1), chopit));
+                        type.append(typeSignatureToString("L" + signature.substring(consumed_chars+1), chopit));
                         // update our consumed count by the number of characters the for type argument
                         // note that this count includes the "L" we added, but that is ok
                         // as it accounts for the "." we didn't consume
@@ -958,7 +1106,7 @@
                     }
                     consumed_chars = n; // Remember value
                     // The rest of the string denotes a `<field_type>'
-                    type = signatureToString(signature.substring(n), chopit);
+                    type = typeSignatureToString(signature.substring(n), chopit);
                     //corrected concurrent private static field acess
                     //Utility.consumed_chars += consumed_chars; is replaced by:
                     final int _temp = unwrap(Utility.consumed_chars) + consumed_chars;
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Visitor.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/Visitor.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * that implements this interface can traverse the contents of a Java class just
  * by calling the `accept' method which all classes have.
  *
- * @version $Id$
  */
 public interface Visitor
 {
@@ -137,6 +136,13 @@
     void visitMethodParameters(MethodParameters obj);
 
     /**
+     * @since 6.4.0
+     */
+    default void visitMethodParameter(final MethodParameter obj) {
+        // empty
+    }
+
+    /**
      * @since 6.0
      */
     void visitConstantMethodType(ConstantMethodType obj);
@@ -164,7 +170,70 @@
     /**
      * @since 6.3
      */
-    default void visitConstantDynamic(ConstantDynamic constantDynamic) {
+    default void visitConstantDynamic(final ConstantDynamic constantDynamic) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitModule(final Module constantModule) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitModuleRequires(final ModuleRequires constantModule) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitModuleExports(final ModuleExports constantModule) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitModuleOpens(final ModuleOpens constantModule) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitModuleProvides(final ModuleProvides constantModule) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitModulePackages(final ModulePackages constantModule) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitModuleMainClass(final ModuleMainClass obj) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitNestHost(final NestHost obj) {
+        // empty
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    default void visitNestMembers(final NestMembers obj) {
         // empty
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AALOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AALOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * AALOAD - Load reference from array
  * <PRE>Stack: ..., arrayref, index -&gt; value</PRE>
  *
- * @version $Id$
  */
 public class AALOAD extends ArrayInstruction implements StackProducer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AASTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AASTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * AASTORE -  Store into reference array
  * <PRE>Stack: ..., arrayref, index, value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class AASTORE extends ArrayInstruction implements StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * ACONST_NULL - Push null reference
  * <PRE>Stack: ... -&gt; ..., null</PRE>
  *
- * @version $Id$
  */
 public class ACONST_NULL extends Instruction implements PushInstruction, TypedInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ALOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ALOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -26,8 +26,7 @@
  * ALOAD - Load reference from local variable
  * <PRE>Stack: ... -&gt; ..., objectref</PRE>
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class ALOAD extends LoadInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java	Tue Jan 21 23:33:18 2020 +0000
@@ -27,7 +27,6 @@
  * ANEWARRAY -  Create new array of references
  * <PRE>Stack: ..., count -&gt; ..., arrayref</PRE>
  *
- * @version $Id$
  */
 public class ANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction,
         ExceptionThrower, StackConsumer, StackProducer {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ARETURN.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ARETURN.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * ARETURN -  Return reference from method
  * <PRE>Stack: ..., objectref -&gt; &lt;empty&gt;</PRE>
  *
- * @version $Id$
  */
 public class ARETURN extends ReturnInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -26,7 +26,6 @@
  * ARRAYLENGTH -  Get length of array
  * <PRE>Stack: ..., arrayref -&gt; ..., length</PRE>
  *
- * @version $Id$
  * @LastModified: Jun 2019
  */
 public class ARRAYLENGTH extends Instruction
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ASTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ASTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,8 +25,7 @@
  * ASTORE - Store reference into local variable
  * <PRE>Stack ..., objectref -&gt; ... </PRE>
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class ASTORE extends StoreInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ATHROW.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ATHROW.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -26,8 +26,7 @@
  * ATHROW -  Throw exception
  * <PRE>Stack: ..., objectref -&gt; objectref</PRE>
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class ATHROW extends Instruction implements UnconditionalBranch, ExceptionThrower {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * Denote family of instructions that allocates space in the heap.
  *
- * @version $Id$
  */
 public interface AllocationInstruction {
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AnnotationEntryGen.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/AnnotationEntryGen.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -40,7 +40,7 @@
 
 /**
  * @since 6.0
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class AnnotationEntryGen {
     private int typeIndex;
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
 /**
  * Super class for the family of arithmetic instructions.
  *
- * @version $Id$
  */
 public abstract class ArithmeticInstruction extends Instruction implements TypedInstruction,
         StackProducer, StackConsumer {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
 /**
  * Super class for instructions dealing with array access such as IALOAD.
  *
- * @version $Id$
  */
 public abstract class ArrayInstruction extends Instruction implements ExceptionThrower,
         TypedInstruction {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayType.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayType.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
 /**
  * Denotes array type, such as int[][]
  *
- * @version $Id$
  */
 public final class ArrayType extends ReferenceType {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BALOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BALOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
  * BALOAD - Load byte or boolean from array
  * <PRE>Stack: ..., arrayref, index -&gt; ..., value</PRE>
  *
- * @version $Id$
  */
 public class BALOAD extends ArrayInstruction implements StackProducer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BASTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BASTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
  * BASTORE -  Store into byte or boolean array
  * <PRE>Stack: ..., arrayref, index, value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class BASTORE extends ArrayInstruction implements StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BIPUSH.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BIPUSH.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
  *
  * <PRE>Stack: ... -&gt; ..., value</PRE>
  *
- * @version $Id$
  */
 public class BIPUSH extends Instruction implements ConstantPushInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java	Tue Jan 21 23:33:18 2020 +0000
@@ -23,7 +23,6 @@
 /**
  * BREAKPOINT, JVM dependent, ignored by default
  *
- * @version $Id$
  */
 public class BREAKPOINT extends Instruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BasicType.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BasicType.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
 /**
  * Denotes basic type such as int.
  *
- * @version $Id$
  */
 public final class BasicType extends Type {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BranchHandle.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BranchHandle.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
  * @see InstructionHandle
  * @see Instruction
  * @see InstructionList
- * @version $Id$
  */
 public final class BranchHandle extends InstructionHandle {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BranchInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/BranchInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,8 +30,7 @@
  * LOOKUPSWITCH and TABLESWITCH.
  *
  * @see InstructionList
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class BranchInstruction extends Instruction implements InstructionTargeter {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CALOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CALOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * CALOAD - Load char from array
  * <PRE>Stack: ..., arrayref, index -&gt; ..., value</PRE>
  *
- * @version $Id$
  */
 public class CALOAD extends ArrayInstruction implements StackProducer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CASTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CASTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * CASTORE -  Store into char array
  * <PRE>Stack: ..., arrayref, index, value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class CASTORE extends ArrayInstruction implements StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java	Tue Jan 21 23:33:18 2020 +0000
@@ -27,7 +27,6 @@
  * CHECKCAST - Check whether object is of given type
  * <PRE>Stack: ..., objectref -&gt; ..., objectref</PRE>
  *
- * @version $Id$
  */
 public class CHECKCAST extends CPInstruction implements LoadClass, ExceptionThrower, StackProducer,
         StackConsumer {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CPInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CPInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -35,8 +35,7 @@
  * @see LDC
  * @see INVOKEVIRTUAL
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class CPInstruction extends Instruction implements TypedInstruction,
         IndexedInstruction {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGen.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGen.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -42,8 +42,7 @@
  * existing java class (file).
  *
  * @see JavaClass
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class ClassGen extends AccessFlags implements Cloneable {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGenException.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGenException.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * Thrown on internal errors. Extends RuntimeException so it hasn't to be declared
  * in the throws clause every time.
  *
- * @version $Id$
  */
 public class ClassGenException extends RuntimeException {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassObserver.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ClassObserver.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * Implement this interface if you're interested in changes to a ClassGen object
  * and register yourself with addObserver().
  *
- * @version $Id$
  */
 public interface ClassObserver {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * The end of the region is automatically mapped to be exclusive when calling
  * getCodeException(), i.e., there is no difference semantically.
  *
- * @version $Id$
  * @see     MethodGen
  * @see     CodeException
  * @see     InstructionHandle
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -32,7 +32,6 @@
  * The interface provides the possibilty for the user to write
  * `templates' or `macros' for such reuseable code patterns.
  *
- * @version $Id$
  * @see PUSH
  * @see SWITCH
  */
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -49,9 +49,8 @@
  * Constants.MAX_SHORT entries. Note that the first (0) is used by the
  * JVM and that Double and Long constants need two slots.
  *
- * @version $Id$
  * @see Constant
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class ConstantPoolGen {
 
@@ -182,6 +181,10 @@
                 // TODO should this be handled somehow?
             } else if (c instanceof com.sun.org.apache.bcel.internal.classfile.ConstantMethodHandle) {
                 // TODO should this be handled somehow?
+            } else if (c instanceof com.sun.org.apache.bcel.internal.classfile.ConstantModule) {
+                // TODO should this be handled somehow?
+            } else if (c instanceof com.sun.org.apache.bcel.internal.classfile.ConstantPackage) {
+                // TODO should this be handled somehow?
             } else {
                 assert false : "Unexpected constant type: " + c.getClass().getName();
             }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * Denotes a push instruction that produces a literal on the stack
  * such as  SIPUSH, BIPUSH, ICONST, etc.
  *
- * @version $Id$
 
  * @see ICONST
  * @see SIPUSH
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
 /**
  * Super class for the x2y family of instructions.
  *
- * @version $Id$
  */
 public abstract class ConversionInstruction extends Instruction implements TypedInstruction,
         StackProducer, StackConsumer {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2F.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2F.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * D2F - Convert double to float
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class D2F extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2I.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2I.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * D2I - Convert double to int
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class D2I extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2L.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/D2L.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * D2L - Convert double to long
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class D2L extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DADD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DADD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * <PRE>Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -&gt;</PRE>
  *        ..., result.word1, result1.word2
  *
- * @version $Id$
  */
 public class DADD extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DALOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DALOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DALOAD - Load double from array
  * <PRE>Stack: ..., arrayref, index -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class DALOAD extends ArrayInstruction implements StackProducer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DASTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DASTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DASTORE -  Store into double array
  * <PRE>Stack: ..., arrayref, index, value.word1, value.word2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class DASTORE extends ArrayInstruction implements StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPG.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPG.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DCMPG - Compare doubles: value1 &gt; value2
  * <PRE>Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class DCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DCMPL - Compare doubles: value1 &lt; value2
  * <PRE>Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class DCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCONST.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DCONST.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,8 +25,7 @@
  *
  * <PRE>Stack: ... -&gt; ..., </PRE>
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class DCONST extends Instruction implements ConstantPushInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DDIV.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DDIV.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * <PRE>Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -&gt;</PRE>
  *        ..., result.word1, result.word2
  *
- * @version $Id$
  */
 public class DDIV extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DLOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DLOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DLOAD - Load double from local variable
  * <PRE>Stack ... -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class DLOAD extends LoadInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DMUL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DMUL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * <PRE>Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -&gt;</PRE>
  *        ..., result.word1, result.word2
  *
- * @version $Id$
  */
 public class DMUL extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DNEG.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DNEG.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DNEG - Negate double
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class DNEG extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DREM.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DREM.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * <PRE>Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -&gt;</PRE>
  *        ..., result.word1, result.word2
  *
- * @version $Id$
  */
 public class DREM extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DRETURN.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DRETURN.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DRETURN -  Return double from method
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; &lt;empty&gt;</PRE>
  *
- * @version $Id$
  */
 public class DRETURN extends ReturnInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DSTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DSTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DSTORE - Store double into local variable
  * <pre>Stack: ..., value.word1, value.word2 -&gt; ... </PRE>
  *
- * @version $Id$
  */
 public class DSTORE extends StoreInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DSUB.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DSUB.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  * <PRE>Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -&gt;</PRE>
  *        ..., result.word1, result.word2
  *
- * @version $Id$
  */
 public class DSUB extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DUP - Duplicate top operand stack word
  * <PRE>Stack: ..., word -&gt; ..., word, word</PRE>
  *
- * @version $Id$
  */
 public class DUP extends StackInstruction implements PushInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DUP2 - Duplicate two top operand stack words
  * <PRE>Stack: ..., word2, word1 -&gt; ..., word2, word1, word2, word1</PRE>
  *
- * @version $Id$
  */
 public class DUP2 extends StackInstruction implements PushInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X1.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X1.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DUP2_X1 - Duplicate two top operand stack words and put three down
  * <PRE>Stack: ..., word3, word2, word1 -&gt; ..., word2, word1, word3, word2, word1</PRE>
  *
- * @version $Id$
  */
 public class DUP2_X1 extends StackInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X2.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X2.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DUP2_X2 - Duplicate two top operand stack words and put four down
  * <PRE>Stack: ..., word4, word3, word2, word1 -&gt; ..., word2, word1, word4, word3, word2, word1</PRE>
  *
- * @version $Id$
  */
 public class DUP2_X2 extends StackInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X1.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X1.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DUP_X1 - Duplicate top operand stack word and put two down
  * <PRE>Stack: ..., word2, word1 -&gt; ..., word1, word2, word1</PRE>
  *
- * @version $Id$
  */
 public class DUP_X1 extends StackInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X2.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X2.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * DUP_X2 - Duplicate top operand stack word and put three down
  * <PRE>Stack: ..., word3, word2, word1 -&gt; ..., word1, word3, word2, word1</PRE>
  *
- * @version $Id$
  */
 public class DUP_X2 extends StackInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ElementValueGen.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ElementValueGen.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -34,7 +34,7 @@
 
 /**
  * @since 6.0
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class ElementValueGen
 {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * Supplies empty method bodies to be overridden by subclasses.
  *
- * @version $Id$
  */
 public abstract class EmptyVisitor implements Visitor {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java	Tue Jan 21 23:33:18 2020 +0000
@@ -38,7 +38,6 @@
  * "Throwable" object; so this term is equally used for "Exception"
  * and "Error" objects.
  *
- * @version $Id$
  */
 public interface ExceptionThrower {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2D.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2D.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * F2D - Convert float to double
  * <PRE>Stack: ..., value -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class F2D extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2I.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2I.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * F2I - Convert float to int
  * <PRE>Stack: ..., value -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class F2I extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2L.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/F2L.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * F2L - Convert float to long
  * <PRE>Stack: ..., value -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class F2L extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FADD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FADD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FADD - Add floats
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class FADD extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FALOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FALOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FALOAD - Load float from array
  * <PRE>Stack: ..., arrayref, index -&gt; ..., value</PRE>
  *
- * @version $Id$
  */
 public class FALOAD extends ArrayInstruction implements StackProducer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FASTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FASTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FASTORE -  Store into float array
  * <PRE>Stack: ..., arrayref, index, value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class FASTORE extends ArrayInstruction implements StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPG.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPG.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FCMPG - Compare floats: value1 &gt; value2
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class FCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FCMPL - Compare floats: value1 &lt; value2
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class FCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCONST.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FCONST.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,8 +25,7 @@
  *
  * <PRE>Stack: ... -&gt; ..., </PRE>
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class FCONST extends Instruction implements ConstantPushInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FDIV.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FDIV.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FDIV - Divide floats
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class FDIV extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FLOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FLOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FLOAD - Load float from local variable
  * <PRE>Stack ... -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class FLOAD extends LoadInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FMUL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FMUL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FMUL - Multiply floats
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class FMUL extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FNEG.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FNEG.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FNEG - Negate float
  * <PRE>Stack: ..., value -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class FNEG extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FREM.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FREM.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FREM - Remainder of floats
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class FREM extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FRETURN.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FRETURN.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FRETURN -  Return float from method
  * <PRE>Stack: ..., value -&gt; &lt;empty&gt;</PRE>
  *
- * @version $Id$
  */
 public class FRETURN extends ReturnInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FSTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FSTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FSTORE - Store float into local variable
  * <PRE>Stack: ..., value -&gt; ... </PRE>
  *
- * @version $Id$
  */
 public class FSTORE extends StoreInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FSUB.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FSUB.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * FSUB - Substract floats
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class FSUB extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGen.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGen.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -40,9 +40,8 @@
  * one can do is to add a constant value attribute to a field (which must of
  * course be compatible with to the declared type).
  *
- * @version $Id$
  * @see Field
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class FieldGen extends FieldGenOrMethodGen {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,8 +30,7 @@
  * Super class for FieldGen and MethodGen objects, since they have
  * some methods in common!
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jun 2020
  */
 public abstract class FieldGenOrMethodGen extends AccessFlags implements NamedAndTyped, Cloneable {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
 /**
  * Super class for the GET/PUTxxx family of instructions.
  *
- * @version $Id$
  */
 public abstract class FieldInstruction extends FieldOrMethod {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldObserver.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldObserver.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * Imnplement this interface if you're interested in changes to a FieldGen object
  * and register yourself with addObserver().
  *
- * @version $Id$
  */
 public interface FieldObserver {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java	Tue Jan 21 23:33:18 2020 +0000
@@ -31,7 +31,6 @@
  * Super class for InvokeInstruction and FieldInstruction, since they have
  * some methods in common!
  *
- * @version $Id$
  */
 public abstract class FieldOrMethod extends CPInstruction implements LoadClass {
 
@@ -40,6 +39,7 @@
      * Not to be used otherwise.
      */
     FieldOrMethod() {
+        // no init
     }
 
 
@@ -53,7 +53,7 @@
 
     /** @return signature of referenced method/field.
      */
-    public String getSignature( final ConstantPoolGen cpg ) {
+    public String getSignature(final ConstantPoolGen cpg) {
         final ConstantPool cp = cpg.getConstantPool();
         final ConstantCP cmr = (ConstantCP) cp.getConstant(super.getIndex());
         final ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr.getNameAndTypeIndex());
@@ -63,7 +63,7 @@
 
     /** @return name of referenced method/field.
      */
-    public String getName( final ConstantPoolGen cpg ) {
+    public String getName(final ConstantPoolGen cpg) {
         final ConstantPool cp = cpg.getConstantPool();
         final ConstantCP cmr = (ConstantCP) cp.getConstant(super.getIndex());
         final ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr.getNameAndTypeIndex());
@@ -83,7 +83,7 @@
      *
      */
     @Deprecated
-    public String getClassName( final ConstantPoolGen cpg ) {
+    public String getClassName(final ConstantPoolGen cpg) {
         final ConstantPool cp = cpg.getConstantPool();
         final ConstantCP cmr = (ConstantCP) cp.getConstant(super.getIndex());
         final String className = cp.getConstantString(cmr.getClassIndex(), Const.CONSTANT_Class);
@@ -101,20 +101,20 @@
      *    getReferenceType() instead.
      */
     @Deprecated
-    public ObjectType getClassType( final ConstantPoolGen cpg ) {
+    public ObjectType getClassType(final ConstantPoolGen cpg) {
         return ObjectType.getInstance(getClassName(cpg));
     }
 
 
     /**
-     * Return the reference type representing the class, interface,
+     * Gets the reference type representing the class, interface,
      * or array class referenced by the instruction.
      * @param cpg the ConstantPoolGen used to create the instruction
      * @return an ObjectType (if the referenced class type is a class
      *   or interface), or an ArrayType (if the referenced class
      *   type is an array class)
      */
-    public ReferenceType getReferenceType( final ConstantPoolGen cpg ) {
+    public ReferenceType getReferenceType(final ConstantPoolGen cpg) {
         final ConstantPool cp = cpg.getConstantPool();
         final ConstantCP cmr = (ConstantCP) cp.getConstant(super.getIndex());
         String className = cp.getConstantString(cmr.getClassIndex(), Const.CONSTANT_Class);
@@ -127,17 +127,18 @@
 
 
     /**
-     * Get the ObjectType of the method return or field.
+     * Gets the ObjectType of the method return or field.
      *
      * @return type of the referenced class/interface
      * @throws ClassGenException when the field is (or method returns) an array,
      */
     @Override
-    public ObjectType getLoadClassType( final ConstantPoolGen cpg ) {
+    public ObjectType getLoadClassType(final ConstantPoolGen cpg) {
         final ReferenceType rt = getReferenceType(cpg);
-        if(rt instanceof ObjectType) {
-            return (ObjectType)rt;
+        if (rt instanceof ObjectType) {
+            return (ObjectType) rt;
         }
-        throw new ClassGenException(rt.getSignature() + " does not represent an ObjectType");
+        throw new ClassGenException(rt.getClass().getCanonicalName() + " " +
+                rt.getSignature() + " does not represent an ObjectType");
     }
 }
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GETFIELD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GETFIELD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
  * OR
  * <PRE>Stack: ..., objectref -&gt; ..., value.word1, value.word2</PRE>
  *
- * @version $Id$
  */
 public class GETFIELD extends FieldInstruction implements ExceptionThrower, StackConsumer,
         StackProducer {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GETSTATIC.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GETSTATIC.java	Tue Jan 21 23:33:18 2020 +0000
@@ -30,7 +30,6 @@
  * OR
  * <PRE>Stack: ..., -&gt; ..., value.word1, value.word2</PRE>
  *
- * @version $Id$
  */
 public class GETSTATIC extends FieldInstruction implements PushInstruction, ExceptionThrower {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO.java	Tue Jan 21 23:33:18 2020 +0000
@@ -27,7 +27,6 @@
 /**
  * GOTO - Branch always (to relative offset, not absolute address)
  *
- * @version $Id$
  */
 public class GOTO extends GotoInstruction implements VariableLengthInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO_W.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO_W.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
 /**
  * GOTO_W - Branch always (to relative offset, not absolute address)
  *
- * @version $Id$
  */
 public class GOTO_W extends GotoInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GotoInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/GotoInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * Super class for GOTO
  *
- * @version $Id$
  */
 public abstract class GotoInstruction extends BranchInstruction implements UnconditionalBranch {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2B.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2B.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * I2B - Convert int to byte
  * <PRE>Stack: ..., value -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class I2B extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2C.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2C.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * I2C - Convert int to char
  * <PRE>Stack: ..., value -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class I2C extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2D.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2D.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * I2D - Convert int to double
  * <PRE>Stack: ..., value -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class I2D extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2F.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2F.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * I2F - Convert int to float
  * <PRE>Stack: ..., value -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class I2F extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2L.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2L.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * I2L - Convert int to long
  * <PRE>Stack: ..., value -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class I2L extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2S.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/I2S.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * I2S - Convert int to short
  * <PRE>Stack: ..., value -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class I2S extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IADD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IADD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IADD - Add ints
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class IADD extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IALOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IALOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IALOAD - Load int from array
  * <PRE>Stack: ..., arrayref, index -&gt; ..., value</PRE>
  *
- * @version $Id$
  */
 public class IALOAD extends ArrayInstruction implements StackProducer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IAND.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IAND.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IAND - Bitwise AND int
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class IAND extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IASTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IASTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IASTORE -  Store into int array
  * <PRE>Stack: ..., arrayref, index, value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IASTORE extends ArrayInstruction implements StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ICONST.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ICONST.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
  *
  * <PRE>Stack: ... -&gt; ..., </PRE>
  *
- * @version $Id$
  */
 public class ICONST extends Instruction implements ConstantPushInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IDIV.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IDIV.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -26,8 +26,7 @@
  * IDIV - Divide ints
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class IDIV extends ArithmeticInstruction implements ExceptionThrower {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFEQ.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFEQ.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFEQ extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFGE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFGE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFGE extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFGT.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFGT.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFGT extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFLE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFLE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFLE extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFLT.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFLT.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFLT extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFNE extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNONNULL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNONNULL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., reference -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFNONNULL extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNULL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IFNULL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., reference -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IFNULL extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ACMPEQ extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ACMPNE extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ICMPEQ extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ICMPGE extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ICMPGT extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ICMPLE extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ICMPLT extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -26,7 +26,6 @@
  *
  * <PRE>Stack: ..., value1, value2 -&gt; ...</PRE>
  *
- * @version $Id$
  */
 public class IF_ICMPNE extends IfInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IINC.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IINC.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
 /**
  * IINC - Increment local variable by constant
  *
- * @version $Id$
  */
 public class IINC extends LocalVariableInstruction {
 
@@ -50,7 +49,7 @@
      * @param c increment factor
      */
     public IINC(final int n, final int c) {
-        super(); // Default behaviour of LocalVariableInstruction causes error
+        super(); // Default behavior of LocalVariableInstruction causes error
         super.setOpcode(com.sun.org.apache.bcel.internal.Const.IINC);
         super.setLength((short) 3);
         setIndex(n); // May set wide as side effect
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ILOAD.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ILOAD.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * ILOAD - Load int from local variable onto stack
  * <PRE>Stack: ... -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class ILOAD extends LoadInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP1.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP1.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * IMPDEP1 - Implementation dependent
  *
- * @version $Id$
  */
 public class IMPDEP1 extends Instruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP2.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP2.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * IMPDEP2 - Implementation dependent
  *
- * @version $Id$
  */
 public class IMPDEP2 extends Instruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMUL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IMUL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IMUL - Multiply ints
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class IMUL extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INEG.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INEG.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * INEG - Negate int
  * <PRE>Stack: ..., value -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class INEG extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java	Tue Jan 21 23:33:18 2020 +0000
@@ -27,7 +27,6 @@
  * INSTANCEOF - Determine if object is of given type
  * <PRE>Stack: ..., objectref -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class INSTANCEOF extends CPInstruction implements LoadClass, ExceptionThrower,
         StackProducer, StackConsumer {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEDYNAMIC.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEDYNAMIC.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -35,12 +35,11 @@
  * expects to be able to get the class of the method. Ignores the bootstrap
  * mechanism entirely.
  *
- * @version $Id: InvokeInstruction.java 1152072 2011-07-29 01:54:05Z dbrosius $
  * @see
  * <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokedynamic">
  * The invokedynamic instruction in The Java Virtual Machine Specification</a>
  * @since 6.0
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class INVOKEDYNAMIC extends InvokeInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -33,7 +33,6 @@
  * INVOKEINTERFACE - Invoke interface method
  * <PRE>Stack: ..., objectref, [arg1, [arg2 ...]] -&gt; ...</PRE>
  *
- * @version $Id$
  * @see
  * <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokeinterface">
  * The invokeinterface instruction in The Java Virtual Machine Specification</a>
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -33,7 +33,6 @@
  *
  * <PRE>Stack: ..., objectref, [arg1, [arg2 ...]] -&gt; ...</PRE>
  *
- * @version $Id$
  * @see
  * <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokespecial">
  * The invokespecial instruction in The Java Virtual Machine Specification</a>
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java	Tue Jan 21 23:33:18 2020 +0000
@@ -32,7 +32,6 @@
  *
  * <PRE>Stack: ..., [arg1, [arg2 ...]] -&gt; ...</PRE>
  *
- * @version $Id$
  * @see
  * <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokestatic">
  * The invokestatic instruction in The Java Virtual Machine Specification</a>
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -32,7 +32,6 @@
  *
  * <PRE>Stack: ..., objectref, [arg1, [arg2 ...]] -&gt; ...</PRE>
  *
- * @version $Id$
  * @see
  * <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokevirtual">
  * The invokevirtual instruction in The Java Virtual Machine Specification</a>
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IOR.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IOR.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IOR - Bitwise OR int
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class IOR extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IREM.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IREM.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -26,8 +26,7 @@
  * IREM - Remainder of int
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class IREM extends ArithmeticInstruction implements ExceptionThrower {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IRETURN.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IRETURN.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IRETURN -  Return int from method
  * <PRE>Stack: ..., value -&gt; &lt;empty&gt;</PRE>
  *
- * @version $Id$
  */
 public class IRETURN extends ReturnInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISHL.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISHL.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * ISHL - Arithmetic shift left int
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class ISHL extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISHR.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISHR.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * ISHR - Arithmetic shift right int
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class ISHR extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISTORE.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISTORE.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * ISTORE - Store int from stack into local variable
  * <PRE>Stack: ..., value -&gt; ... </PRE>
  *
- * @version $Id$
  */
 public class ISTORE extends StoreInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISUB.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ISUB.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * ISUB - Substract ints
  * <PRE>Stack: ..., value1, value2 -&gt; result</PRE>
  *
- * @version $Id$
  */
 public class ISUB extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IUSHR.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IUSHR.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IUSHR - Logical shift right int
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class IUSHR extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IXOR.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IXOR.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * IXOR - Bitwise XOR int
  * <PRE>Stack: ..., value1, value2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class IXOR extends ArithmeticInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IfInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IfInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * Super class for the IFxxx family of instructions.
  *
- * @version $Id$
  */
 public abstract class IfInstruction extends BranchInstruction implements StackConsumer {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * Denote entity that refers to an index, e.g. local variable instructions,
  * RET, CPInstruction, etc.
  *
- * @version $Id$
  */
 public interface IndexedInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/Instruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/Instruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -29,8 +29,7 @@
 /**
  * Abstract super class for all Java byte codes.
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class Instruction implements Cloneable {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionComparator.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionComparator.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,40 +25,38 @@
  * Equality of instructions isn't clearly to be defined. You might
  * wish, for example, to compare whether instructions have the same
  * meaning. E.g., whether two INVOKEVIRTUALs describe the same
- * call.<br>The DEFAULT comparator however, considers two instructions
+ * call.
+ * <p>
+ * The DEFAULT comparator however, considers two instructions
  * to be equal if they have same opcode and point to the same indexes
  * (if any) in the constant pool or the same local variable index. Branch
  * instructions must have the same target.
+ * </p>
  *
  * @see Instruction
- * @version $Id$
  */
 public interface InstructionComparator {
 
-    InstructionComparator DEFAULT = new InstructionComparator() {
-
-        @Override
-        public boolean equals( final Instruction i1, final Instruction i2 ) {
-            if (i1.getOpcode() == i2.getOpcode()) {
-                if (i1 instanceof BranchInstruction) {
-                 // BIs are never equal to make targeters work correctly (BCEL-195)
-                    return false;
+    InstructionComparator DEFAULT = (i1, i2) -> {
+        if (i1.getOpcode() == i2.getOpcode()) {
+            if (i1 instanceof BranchInstruction) {
+             // BIs are never equal to make targeters work correctly (BCEL-195)
+                return false;
 //                } else if (i1 == i2) { TODO consider adding this shortcut
 //                    return true; // this must be AFTER the BI test
-                } else if (i1 instanceof ConstantPushInstruction) {
-                    return ((ConstantPushInstruction) i1).getValue().equals(
-                            ((ConstantPushInstruction) i2).getValue());
-                } else if (i1 instanceof IndexedInstruction) {
-                    return ((IndexedInstruction) i1).getIndex() == ((IndexedInstruction) i2)
-                            .getIndex();
-                } else if (i1 instanceof NEWARRAY) {
-                    return ((NEWARRAY) i1).getTypecode() == ((NEWARRAY) i2).getTypecode();
-                } else {
-                    return true;
-                }
+            } else if (i1 instanceof ConstantPushInstruction) {
+                return ((ConstantPushInstruction) i1).getValue().equals(
+                        ((ConstantPushInstruction) i2).getValue());
+            } else if (i1 instanceof IndexedInstruction) {
+                return ((IndexedInstruction) i1).getIndex() == ((IndexedInstruction) i2)
+                        .getIndex();
+            } else if (i1 instanceof NEWARRAY) {
+                return ((NEWARRAY) i1).getTypecode() == ((NEWARRAY) i2).getTypecode();
+            } else {
+                return true;
             }
-            return false;
         }
+        return false;
     };
 
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionConst.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionConst.java	Tue Jan 21 23:33:18 2020 +0000
@@ -37,7 +37,6 @@
  * The Instructions can also accessed directly under their names, so
  * it's possible to write il.append(Instruction.ICONST_0);
  *
- * @version $Id: InstructionConstants.java 1695415 2015-08-12 01:02:39Z chas $
  */
 public final class InstructionConst {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionFactory.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionFactory.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,10 +30,9 @@
  * Note: The static createXXX methods return singleton instances
  * from the {@link InstructionConst} class.
  *
- * @version $Id$
  * @see Const
  * @see InstructionConst
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class InstructionFactory {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionHandle.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionHandle.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -39,10 +39,10 @@
  * can traverse the list via an Enumeration returned by
  * InstructionList.elements().
  *
- * @version $Id$
  * @see Instruction
  * @see BranchHandle
  * @see InstructionList
+ * @LastModified: Jan 2020
  */
 public class InstructionHandle {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionList.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionList.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
  /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -44,11 +44,10 @@
  * A list is finally dumped to a byte code array with <a
  * href="#getByteCode()">getByteCode</a>.
  *
- * @version $Id$
  * @see Instruction
  * @see InstructionHandle
  * @see BranchHandle
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public class InstructionList implements Iterable<InstructionHandle> {
 
@@ -66,7 +65,8 @@
     /**
      * Create instruction list containing one instruction.
      *
-     * @param i initial instruction
+     * @param i
+     *            initial instruction
      */
     public InstructionList(final Instruction i) {
         append(i);
@@ -75,7 +75,8 @@
     /**
      * Create instruction list containing one instruction.
      *
-     * @param i initial instruction
+     * @param i
+     *            initial instruction
      */
     public InstructionList(final BranchInstruction i) {
         append(i);
@@ -85,7 +86,8 @@
      * Initialize list with (nonnull) compound instruction. Consumes argument
      * list, i.e., it becomes empty.
      *
-     * @param c compound instruction (list)
+     * @param c
+     *            compound instruction (list)
      */
     public InstructionList(final CompoundInstruction c) {
         append(c.getInstructionList());
@@ -102,21 +104,25 @@
      * Find the target instruction (handle) that corresponds to the given target
      * position (byte code offset).
      *
-     * @param ihs array of instruction handles, i.e. il.getInstructionHandles()
-     * @param pos array of positions corresponding to ihs, i.e.
-     * il.getInstructionPositions()
-     * @param count length of arrays
-     * @param target target position to search for
+     * @param ihs
+     *            array of instruction handles, i.e. il.getInstructionHandles()
+     * @param pos
+     *            array of positions corresponding to ihs, i.e. il.getInstructionPositions()
+     * @param count
+     *            length of arrays
+     * @param target
+     *            target position to search for
      * @return target position's instruction handle if available
      */
-    public static InstructionHandle findHandle(final InstructionHandle[] ihs, final int[] pos, final int count, final int target) {
+    public static InstructionHandle findHandle(final InstructionHandle[] ihs,
+            final int[] pos, final int count, final int target) {
         int l = 0;
         int r = count - 1;
         /*
          * Do a binary search since the pos array is orderd.
          */
         do {
-            final int i = (l + r) / 2;
+            final int i = (l + r) >>> 1;
             final int j = pos[i];
             if (j == target) {
                 return ihs[i];
@@ -134,7 +140,8 @@
      * only works properly, if the list is freshly initialized from a byte array
      * or setPositions() has been called before this method.
      *
-     * @param pos byte code position to search for
+     * @param pos
+     *            byte code position to search for
      * @return target position's instruction handle if available
      */
     public InstructionHandle findHandle(final int pos) {
@@ -152,7 +159,8 @@
     /**
      * Initialize instruction list from byte array.
      *
-     * @param code byte array containing the instructions
+     * @param code
+     *            byte array containing the instructions
      */
     public InstructionList(final byte[] code) {
         int count = 0; // Contains actual length
@@ -195,8 +203,8 @@
                 final BranchInstruction bi = (BranchInstruction) ihs[i].getInstruction();
                 int target = bi.getPosition() + bi.getIndex();
                 /*
-                                                                * Byte code position: relative -> absolute.
-                 */
+                 * Byte code position: relative -> absolute.
+                */
                 // Search for target position
                 InstructionHandle ih = findHandle(ihs, pos, count, target);
                 if (ih == null) {
@@ -224,10 +232,11 @@
      * Append another list after instruction (handle) ih contained in this list.
      * Consumes argument list, i.e., it becomes empty.
      *
-     * @param ih where to append the instruction list
-     * @param il Instruction list to append to this one
-     * @return instruction handle pointing to the <B>first</B> appended
-     * instruction
+     * @param ih
+     *            where to append the instruction list
+     * @param il
+     *            Instruction list to append to this one
+     * @return instruction handle pointing to the <B>first</B> appended instruction
      */
     public InstructionHandle append(final InstructionHandle ih, final InstructionList il) {
         if (il == null) {
@@ -255,10 +264,11 @@
      * Append another list after instruction i contained in this list. Consumes
      * argument list, i.e., it becomes empty.
      *
-     * @param i where to append the instruction list
-     * @param il Instruction list to append to this one
-     * @return instruction handle pointing to the <B>first</B> appended
-     * instruction
+     * @param i
+     *            where to append the instruction list
+     * @param il
+     *            Instruction list to append to this one
+     * @return instruction handle pointing to the <B>first</B> appended instruction
      */
     public InstructionHandle append(final Instruction i, final InstructionList il) {
         InstructionHandle ih;
@@ -272,7 +282,8 @@
      * Append another list to this one. Consumes argument list, i.e., it becomes
      * empty.
      *
-     * @param il list to append to end of this list
+     * @param il
+     *            list to append to end of this list
      * @return instruction handle of the <B>first</B> appended instruction
      */
     public InstructionHandle append(final InstructionList il) {
@@ -295,7 +306,8 @@
     /**
      * Append an instruction to the end of this list.
      *
-     * @param ih instruction to append
+     * @param ih
+     *            instruction to append
      */
     private void append(final InstructionHandle ih) {
         if (isEmpty()) {
@@ -307,14 +319,14 @@
             ih.setNext(null);
             end = ih;
         }
-
         length++; // Update length
     }
 
     /**
      * Append an instruction to the end of this list.
      *
-     * @param i instruction to append
+     * @param i
+     *            instruction to append
      * @return instruction handle of the appended instruction
      */
     public InstructionHandle append(final Instruction i) {
@@ -326,7 +338,8 @@
     /**
      * Append a branch instruction to the end of this list.
      *
-     * @param i branch instruction to append
+     * @param i
+     *            branch instruction to append
      * @return branch instruction handle of the appended instruction
      */
     public BranchHandle append(final BranchInstruction i) {
@@ -339,8 +352,10 @@
      * Append a single instruction j after another instruction i, which must be
      * in this list of course!
      *
-     * @param i Instruction in list
-     * @param j Instruction to append after i in list
+     * @param i
+     *            Instruction in list
+     * @param j
+     *            Instruction to append after i in list
      * @return instruction handle of the first appended instruction
      */
     public InstructionHandle append(final Instruction i, final Instruction j) {
@@ -350,8 +365,10 @@
     /**
      * Append a compound instruction, after instruction i.
      *
-     * @param i Instruction in list
-     * @param c The composite instruction (containing an InstructionList)
+     * @param i
+     *            Instruction in list
+     * @param c
+     *            The composite instruction (containing an InstructionList)
      * @return instruction handle of the first appended instruction
      */
     public InstructionHandle append(final Instruction i, final CompoundInstruction c) {
@@ -361,7 +378,8 @@
     /**
      * Append a compound instruction.
      *
-     * @param c The composite instruction (containing an InstructionList)
+     * @param c
+     *            The composite instruction (containing an InstructionList)
      * @return instruction handle of the first appended instruction
      */
     public InstructionHandle append(final CompoundInstruction c) {
@@ -371,8 +389,10 @@
     /**
      * Append a compound instruction.
      *
-     * @param ih where to append the instruction list
-     * @param c The composite instruction (containing an InstructionList)
+     * @param ih
+     *            where to append the instruction list
+     * @param c
+     *            The composite instruction (containing an InstructionList)
      * @return instruction handle of the first appended instruction
      */
     public InstructionHandle append(final InstructionHandle ih, final CompoundInstruction c) {
@@ -380,26 +400,26 @@
     }
 
     /**
-     * Append an instruction after instruction (handle) ih contained in this
-     * list.
+     * Append an instruction after instruction (handle) ih contained in this list.
      *
-     * @param ih where to append the instruction list
-     * @param i Instruction to append
-     * @return instruction handle pointing to the <B>first</B> appended
-     * instruction
+     * @param ih
+     *            where to append the instruction list
+     * @param i
+     *            Instruction to append
+     * @return instruction handle pointing to the <B>first</B> appended instruction
      */
     public InstructionHandle append(final InstructionHandle ih, final Instruction i) {
         return append(ih, new InstructionList(i));
     }
 
     /**
-     * Append an instruction after instruction (handle) ih contained in this
-     * list.
+     * Append an instruction after instruction (handle) ih contained in this list.
      *
-     * @param ih where to append the instruction list
-     * @param i Instruction to append
-     * @return instruction handle pointing to the <B>first</B> appended
-     * instruction
+     * @param ih
+     *            where to append the instruction list
+     * @param i
+     *            Instruction to append
+     * @return instruction handle pointing to the <B>first</B> appended instruction
      */
     public BranchHandle append(final InstructionHandle ih, final BranchInstruction i) {
         final BranchHandle bh = BranchHandle.getBranchHandle(i);
@@ -413,8 +433,10 @@
      * Insert another list before Instruction handle ih contained in this list.
      * Consumes argument list, i.e., it becomes empty.
      *
-     * @param ih where to append the instruction list
-     * @param il Instruction list to insert
+     * @param ih
+     *            where to append the instruction list
+     * @param il
+     *            Instruction list to insert
      * @return instruction handle of the first inserted instruction
      */
     public InstructionHandle insert(final InstructionHandle ih, final InstructionList il) {
@@ -442,7 +464,8 @@
     /**
      * Insert another list.
      *
-     * @param il list to insert before start of this list
+     * @param il
+     *            list to insert before start of this list
      * @return instruction handle of the first inserted instruction
      */
     public InstructionHandle insert(final InstructionList il) {
@@ -456,7 +479,8 @@
     /**
      * Insert an instruction at start of this list.
      *
-     * @param ih instruction to insert
+     * @param ih
+     *            instruction to insert
      */
     private void insert(final InstructionHandle ih) {
         if (isEmpty()) {
@@ -475,10 +499,11 @@
      * Insert another list before Instruction i contained in this list. Consumes
      * argument list, i.e., it becomes empty.
      *
-     * @param i where to append the instruction list
-     * @param il Instruction list to insert
-     * @return instruction handle pointing to the first inserted instruction,
-     * i.e., il.getStart()
+     * @param i
+     *            where to append the instruction list
+     * @param il
+     *            Instruction list to insert
+     * @return instruction handle pointing to the first inserted instruction, i.e., il.getStart()
      */
     public InstructionHandle insert(final Instruction i, final InstructionList il) {
         InstructionHandle ih;
@@ -491,7 +516,8 @@
     /**
      * Insert an instruction at start of this list.
      *
-     * @param i instruction to insert
+     * @param i
+     *            instruction to insert
      * @return instruction handle of the inserted instruction
      */
     public InstructionHandle insert(final Instruction i) {
@@ -503,7 +529,8 @@
     /**
      * Insert a branch instruction at start of this list.
      *
-     * @param i branch instruction to insert
+     * @param i
+     *            branch instruction to insert
      * @return branch instruction handle of the appended instruction
      */
     public BranchHandle insert(final BranchInstruction i) {
@@ -516,8 +543,10 @@
      * Insert a single instruction j before another instruction i, which must be
      * in this list of course!
      *
-     * @param i Instruction in list
-     * @param j Instruction to insert before i in list
+     * @param i
+     *            Instruction in list
+     * @param j
+     *            Instruction to insert before i in list
      * @return instruction handle of the first inserted instruction
      */
     public InstructionHandle insert(final Instruction i, final Instruction j) {
@@ -527,8 +556,10 @@
     /**
      * Insert a compound instruction before instruction i.
      *
-     * @param i Instruction in list
-     * @param c The composite instruction (containing an InstructionList)
+     * @param i
+     *            Instruction in list
+     * @param c
+     *            The composite instruction (containing an InstructionList)
      * @return instruction handle of the first inserted instruction
      */
     public InstructionHandle insert(final Instruction i, final CompoundInstruction c) {
@@ -538,7 +569,8 @@
     /**
      * Insert a compound instruction.
      *
-     * @param c The composite instruction (containing an InstructionList)
+     * @param c
+     *            The composite instruction (containing an InstructionList)
      * @return instruction handle of the first inserted instruction
      */
     public InstructionHandle insert(final CompoundInstruction c) {
@@ -546,11 +578,12 @@
     }
 
     /**
-     * Insert an instruction before instruction (handle) ih contained in this
-     * list.
+     * Insert an instruction before instruction (handle) ih contained in this list.
      *
-     * @param ih where to insert to the instruction list
-     * @param i Instruction to insert
+     * @param ih
+     *            where to insert to the instruction list
+     * @param i
+     *            Instruction to insert
      * @return instruction handle of the first inserted instruction
      */
     public InstructionHandle insert(final InstructionHandle ih, final Instruction i) {
@@ -560,8 +593,10 @@
     /**
      * Insert a compound instruction.
      *
-     * @param ih where to insert the instruction list
-     * @param c The composite instruction (containing an InstructionList)
+     * @param ih
+     *            where to insert the instruction list
+     * @param c
+     *            The composite instruction (containing an InstructionList)
      * @return instruction handle of the first inserted instruction
      */
     public InstructionHandle insert(final InstructionHandle ih, final CompoundInstruction c) {
@@ -569,11 +604,12 @@
     }
 
     /**
-     * Insert an instruction before instruction (handle) ih contained in this
-     * list.
+     * Insert an instruction before instruction (handle) ih contained in this list.
      *
-     * @param ih where to insert to the instruction list
-     * @param i Instruction to insert
+     * @param ih
+     *            where to insert to the instruction list
+     * @param i
+     *            Instruction to insert
      * @return instruction handle of the first inserted instruction
      */
     public BranchHandle insert(final InstructionHandle ih, final BranchInstruction i) {
@@ -587,14 +623,18 @@
     /**
      * Take all instructions (handles) from "start" to "end" and append them
      * after the new location "target". Of course, "end" must be after "start"
-     * and target must not be located withing this range. If you want to move
-     * something to the start of the list use null as value for target.<br>
+     * and target must not be located within this range. If you want to move
+     * something to the start of the list use null as value for target.
+     * <p>
      * Any instruction targeters pointing to handles within the block, keep
      * their targets.
      *
-     * @param start of moved block
-     * @param end of moved block
-     * @param target of moved block
+     * @param start
+     *            of moved block
+     * @param end
+     *            of moved block
+     * @param target
+     *            of moved block
      */
     public void move(final InstructionHandle start, final InstructionHandle end, final InstructionHandle target) {
         // Step 1: Check constraints
@@ -648,8 +688,10 @@
     /**
      * Move a single instruction (handle) to a new location.
      *
-     * @param ih moved instruction
-     * @param target new location of moved instruction
+     * @param ih
+     *            moved instruction
+     * @param target
+     *            new location of moved instruction
      */
     public void move(final InstructionHandle ih, final InstructionHandle target) {
         move(ih, ih, target);
@@ -660,8 +702,10 @@
      * this list. Throws TargetLostException when one of the removed instruction
      * handles is still being targeted.
      *
-     * @param prev where to start deleting (predecessor, exclusive)
-     * @param next where to end deleting (successor, exclusive)
+     * @param prev
+     *            where to start deleting (predecessor, exclusive)
+     * @param next
+     *            where to end deleting (successor, exclusive)
      */
     private void remove(final InstructionHandle prev, InstructionHandle next) throws TargetLostException {
         InstructionHandle first;
@@ -716,17 +760,18 @@
      * Remove instruction from this list. The corresponding Instruction handles
      * must not be reused!
      *
-     * @param ih instruction (handle) to remove
+     * @param ih
+     *            instruction (handle) to remove
      */
     public void delete(final InstructionHandle ih) throws TargetLostException {
         remove(ih.getPrev(), ih.getNext());
     }
 
     /**
-     * Remove instruction from this list. The corresponding Instruction handles
-     * must not be reused!
+     * Remove instruction from this list. The corresponding Instruction handles must not be reused!
      *
-     * @param i instruction to remove
+     * @param i
+     *            instruction to remove
      */
     public void delete(final Instruction i) throws TargetLostException {
         InstructionHandle ih;
@@ -742,8 +787,10 @@
      * `to', or risk havoc. The corresponding Instruction handles must not be
      * reused!
      *
-     * @param from where to start deleting (inclusive)
-     * @param to where to end deleting (inclusive)
+     * @param from
+     *            where to start deleting (inclusive)
+     * @param to
+     *            where to end deleting (inclusive)
      */
     public void delete(final InstructionHandle from, final InstructionHandle to) throws TargetLostException {
         remove(from.getPrev(), to.getNext());
@@ -755,8 +802,10 @@
      * `to', or risk havoc. The corresponding Instruction handles must not be
      * reused!
      *
-     * @param from where to start deleting (inclusive)
-     * @param to where to end deleting (inclusive)
+     * @param from
+     *            where to start deleting (inclusive)
+     * @param to
+     *            where to end deleting (inclusive)
      */
     public void delete(final Instruction from, final Instruction to) throws TargetLostException {
         InstructionHandle from_ih;
@@ -773,7 +822,8 @@
     /**
      * Search for given Instruction reference, start at beginning of list.
      *
-     * @param i instruction to search for
+     * @param i
+     *            instruction to search for
      * @return instruction found on success, null otherwise
      */
     private InstructionHandle findInstruction1(final Instruction i) {
@@ -788,7 +838,8 @@
     /**
      * Search for given Instruction reference, start at end of list
      *
-     * @param i instruction to search for
+     * @param i
+     *            instruction to search for
      * @return instruction found on success, null otherwise
      */
     private InstructionHandle findInstruction2(final Instruction i) {
@@ -824,8 +875,8 @@
      * Give all instructions their position number (offset in byte stream),
      * i.e., make the list ready to be dumped.
      *
-     * @param check Perform sanity checks, e.g. if all targeted instructions
-     * really belong to this list
+     * @param check
+     *            Perform sanity checks, e.g. if all targeted instructions really belong to this list
      */
     public void setPositions(final boolean check) { // called by code in other packages
         int max_additional_bytes = 0;
@@ -882,11 +933,11 @@
                 case Const.JSR:
                 case Const.GOTO:
                     max_additional_bytes += 2;
-                    break;
+                break;
                 case Const.TABLESWITCH:
                 case Const.LOOKUPSWITCH:
                     max_additional_bytes += 3;
-                    break;
+                break;
             }
             index += i.getLength();
         }
@@ -909,12 +960,8 @@
             pos[count++] = index;
             index += i.getLength();
         }
-        if (length == count) {
-            byte_positions = pos;
-        } else {
-            byte_positions = new int[count]; // Trim to proper size
-            System.arraycopy(pos, 0, byte_positions, 0, count);
-        }
+        byte_positions = new int[count]; // Trim to proper size
+        System.arraycopy(pos, 0, byte_positions, 0, count);
     }
 
     /**
@@ -963,7 +1010,8 @@
     }
 
     /**
-     * @param verbose toggle output format
+     * @param verbose
+     *            toggle output format
      * @return String containing all instructions in this list.
      */
     public String toString(final boolean verbose) {
@@ -1145,11 +1193,12 @@
      * Redirect all references from old_target to new_target, i.e., update
      * targets of branch instructions.
      *
-     * @param old_target the old target instruction handle
-     * @param new_target the new target instruction handle
+     * @param old_target
+     *            the old target instruction handle
+     * @param new_target
+     *            the new target instruction handle
      */
-    public void redirectBranches(final InstructionHandle old_target,
-            final InstructionHandle new_target) {
+    public void redirectBranches(final InstructionHandle old_target, final InstructionHandle new_target) {
         for (InstructionHandle ih = start; ih != null; ih = ih.getNext()) {
             final Instruction i = ih.getInstruction();
             if (i instanceof BranchInstruction) {
@@ -1173,13 +1222,15 @@
     /**
      * Redirect all references of local variables from old_target to new_target.
      *
-     * @param lg array of local variables
-     * @param old_target the old target instruction handle
-     * @param new_target the new target instruction handle
+     * @param lg
+     *            array of local variables
+     * @param old_target
+     *            the old target instruction handle
+     * @param new_target
+     *            the new target instruction handle
      * @see MethodGen
      */
-    public void redirectLocalVariables(final LocalVariableGen[] lg,
-            final InstructionHandle old_target, final InstructionHandle new_target) {
+    public void redirectLocalVariables(final LocalVariableGen[] lg, final InstructionHandle old_target, final InstructionHandle new_target) {
         for (final LocalVariableGen element : lg) {
             final InstructionHandle start = element.getStart();
             final InstructionHandle end = element.getEnd();
@@ -1193,12 +1244,14 @@
     }
 
     /**
-     * Redirect all references of exception handlers from old_target to
-     * new_target.
+     * Redirect all references of exception handlers from old_target to new_target.
      *
-     * @param exceptions array of exception handlers
-     * @param old_target the old target instruction handle
-     * @param new_target the new target instruction handle
+     * @param exceptions
+     *            array of exception handlers
+     * @param old_target
+     *            the old target instruction handle
+     * @param new_target
+     *            the new target instruction handle
      * @see MethodGen
      */
     public void redirectExceptionHandlers(final CodeExceptionGen[] exceptions,
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * Implement this interface if you're interested in changes to an InstructionList object
  * and register yourself with addObserver().
  *
- * @version $Id$
  */
 public interface InstructionListObserver {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java	Tue Jan 21 23:33:18 2020 +0000
@@ -28,7 +28,6 @@
  * @see BranchHandle
  * @see LocalVariableGen
  * @see CodeExceptionGen
- * @version $Id$
  */
 public interface InstructionTargeter {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,8 +30,7 @@
 /**
  * Super class for the INVOKExxx family of instructions.
  *
- * @version $Id$
- * @LastModified: Jun 2019
+ * @LastModified: Jan 2020
  */
 public abstract class InvokeInstruction extends FieldOrMethod implements ExceptionThrower,
         StackConsumer, StackProducer {
@@ -59,8 +58,19 @@
     public String toString( final ConstantPool cp ) {
         final Constant c = cp.getConstant(super.getIndex());
         final StringTokenizer tok = new StringTokenizer(cp.constantToString(c));
-        return Const.getOpcodeName(super.getOpcode()) + " " + tok.nextToken().replace('.', '/')
-                + tok.nextToken();
+
+        final String opcodeName = Const.getOpcodeName(super.getOpcode());
+
+        final StringBuilder sb = new StringBuilder(opcodeName);
+        if (tok.hasMoreTokens()) {
+            sb.append(" ");
+            sb.append(tok.nextToken().replace('.', '/'));
+            if (tok.hasMoreTokens()) {
+                sb.append(tok.nextToken());
+            }
+        }
+
+        return sb.toString();
     }
 
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JSR.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JSR.java	Tue Jan 21 23:33:18 2020 +0000
@@ -27,7 +27,6 @@
 /**
  * JSR - Jump to subroutine
  *
- * @version $Id$
  */
 public class JSR extends JsrInstruction implements VariableLengthInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JSR_W.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JSR_W.java	Tue Jan 21 23:33:18 2020 +0000
@@ -29,7 +29,6 @@
 /**
  * JSR_W - Jump to subroutine
  *
- * @version $Id$
  */
 public class JSR_W extends JsrInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JsrInstruction.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/JsrInstruction.java	Tue Jan 21 23:33:18 2020 +0000
@@ -24,7 +24,6 @@
 /**
  * Super class for JSR - Jump to subroutine
  *
- * @version $Id$
  */
 public abstract class JsrInstruction extends BranchInstruction implements UnconditionalBranch,
         TypedInstruction, StackProducer {
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2D.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2D.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * L2D - Convert long to double
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; ..., result.word1, result.word2</PRE>
  *
- * @version $Id$
  */
 public class L2D extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2F.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2F.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * L2F - Convert long to float
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */
 public class L2F extends ConversionInstruction {
 
--- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2I.java	Tue Jan 21 14:23:01 2020 -0800
+++ b/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/L2I.java	Tue Jan 21 23:33:18 2020 +0000
@@ -25,7 +25,6 @@
  * L2I - Convert long to int
  * <PRE>Stack: ..., value.word1, value.word2 -&gt; ..., result</PRE>
  *
- * @version $Id$
  */<