              Apache Commons BCEL
              Version 6.4.1
              RELEASE NOTES


INTRODUCTION:

The Apache Commons BCEL team is pleased to announce the release of
Apache Commons BCEL 6.4.1!

The Byte Code Engineering Library (BCEL) is intended to give users a convenient
way to analyze, create, and manipulate compiled .class files. Classes are
represented by objects containing all the symbolic information of the given
class: methods, fields and byte code instructions.

Bug fix release.

FIXED BUGS:
===========

o BCEL-328: java.util.EmptyStackException at org.apache.bcel.classfile.DescendingVisitor.visitModule (DescendingVisitor.java:592). Thanks to Gary Gregory, Mark Roberts.

CHANGES:
========

o           Update build from Checkstyle Maven Plugin 3.0.0 to 3.1.0. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-bcelchanges-report.html

For complete information on Apache Commons BCEL, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons BCEL website:

https://commons.apache.org/proper/commons-bcel

Download it from https://commons.apache.org/proper/commons-bcel/download_bcel.cgi

Have fun!
-Apache Commons BCEL team

Feedback
--------

Open source works best when you give feedback:

    https://commons.apache.org/bcel

Please direct all bug reports to JIRA:

    https://issues.apache.org/jira/browse/BCEL

Or subscribe to the commons-user mailing list

The Apache Commons Team

-----------------------------------------------------------------------------

              Apache Commons BCEL
              Version 6.4.0
              RELEASE NOTES


INTRODUCTION:

The Apache Commons BCEL team is pleased to announce the release of
Apache Commons BCEL 6.4.0!

The Byte Code Engineering Library (BCEL) is intended to give users a convenient
way to analyze, create, and manipulate compiled .class files. Classes are
represented by objects containing all the symbolic information of the given
class: methods, fields and byte code instructions.

Feature and bug fix release.

NEW FEATURES:
=============

o BCEL-318: Add method org.apache.bcel.classfile.ConstantUtf8.clearCache(). Thanks to Gary Gregory.
o BCEL-320: Add LruCacheClassPathRepository that can scan many JAR files without OutOfMemoryError. Thanks to Tomo Suzuki, Gary Gregory.
o BCEL-322: Add constants to org.apache.bcel.Const for Java 14. Thanks to Gary Gregory.
o BCEL-321: Refactor subclasses of ClassPathRepository for differences in underlying cache. Thanks to Tomo Suzuki.

FIXED BUGS:
===========

o BCEL-316: org.apache.bcel.classfile.Attribute class and subclasses should NOT log to the console by default. Thanks to Gary Gregory.
o BCEL-278: InvokeInstruction.toString(final ConstantPool cp) throws NoSuchElementException #11. Thanks to Valery Barysoky.
o BCEL-270: Calling toString(ConstantPool) on InvokeInstruction throws NullPointerException. Thanks to Alexandru-Constantin Bledea.
o BCEL-323: org.apache.bcel.util.BCELifier to set major and minor versions. Thanks to Tomo Suzuki.
o BCEL-326: Add missing Java 9 and Java 11 class file attributes. #33 Thanks to Mark Roberts.
o BCEL-325: ClassDumper crashes on a module-info.class. #33 Thanks to Mark Roberts.
o BCEL-327: Update signature scanning in Utility to support TypeParameters. #32 Thanks to Mark Roberts.

CHANGES:
========

o BCEL-317: Pluggable cache for ConstantUtf8. Thanks to Tomo Suzuki, Gary Gregory.
o BCEL-299: Fix example src/examples/ClassDumper.java ClassDumper.processID(). Thanks to Gary Gregory, zhangminglei.
o           Update tests from JNA 4.5.0 to 5.3.1. Thanks to Gary Gregory.
o           Update tests from JNA 5.3.1. to 5.4.0. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-bcelchanges-report.html

For complete information on Apache Commons BCEL, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons BCEL website:

https://commons.apache.org/proper/commons-bcel

Download it from https://commons.apache.org/proper/commons-bcel/download_bcel.cgi

Have fun!
-Apache Commons BCEL team

Feedback
--------

Open source works best when you give feedback:

    https://commons.apache.org/bcel

Please direct all bug reports to JIRA:

    https://issues.apache.org/jira/browse/BCEL

Or subscribe to the commons-user mailing list

The Apache Commons Team

-----------------------------------------------------------------------------


              Apache Commons BCEL
              Version 6.3.1
              RELEASE NOTES


INTRODUCTION:

The Apache Commons BCEL team is pleased to announce the release of
Apache Commons BCEL 6.3.1!

The Byte Code Engineering Library (BCEL) is intended to give users a convenient
way to analyze, create, and manipulate compiled .class files. Classes are
represented by objects containing all the symbolic information of the given
class: methods, fields and byte code instructions.

Bug fix release

FIXED BUGS:
===========

o BCEL-267: Race conditions on static fields in BranchHandle and InstructionHandle. Thanks to Stephan Herrmann, Sebb, Gary Gregory, Torsten Curdt.
o BCEL-297: Possible NPE in override implementation of Object.equals (#20) Thanks to Mark Roberts, mingleizhang.
o BCEL-315: NullPointerException at org.apache.bcel.classfile.FieldOrMethod.dump(). Thanks to Gary Gregory.

CHANGES:
========

o BCEL-298: Add some files to .gitignore (#19) Thanks to mingleizhang.



Have fun!
-Apache Commons BCEL team

Feedback
--------

Open source works best when you give feedback:

    https://commons.apache.org/bcel

Please direct all bug reports to JIRA:

    https://issues.apache.org/jira/browse/BCEL

Or subscribe to the commons-user mailing list

The Apache Commons Team

-----------------------------------------------------------------------------

              Apache Commons BCEL
                  Version 6.3
                RELEASE NOTES


INTRODUCTION:

The Apache Commons BCEL team is pleased to announce the release of
Apache Commons BCEL 6.3!

The Byte Code Engineering Library (BCEL) is intended to give users a convenient
way to analyze, create, and manipulate compiled .class files. Classes are
represented by objects containing all the symbolic information of the given
class: methods, fields and byte code instructions.


NEW FEATURES:
=============

o           Added org.apache.bcel.classfile.Visitor.visitConstantDynamic(ConstantDynamic) Thanks to Mark Thomas.
o           Added org.apache.bcel.classfile.ConstantDynamic Thanks to Mark Thomas.
o           Added fields in org.apache.bcel.Const for Java 9, 10, and 11. Thanks to Mark Thomas.
o           Added fields in org.apache.bcel.Const for Java 12 and 13 based on Java Early Access releases. Thanks to Mark Thomas.

FIXED BUGS:
===========

o BCEL-304: ClassPath.getClassFile() and friends do not work with JDK 9 and higher (PR #22.) Thanks to Gary Gregory, Ed Pavlak.
o BCEL-305: ClassPath.getClassFile() and friends do not work with JRE 9 and higher Thanks to Gary Gregory.

CHANGES:
========

o           Initial support for Java 11 Thanks to Mark Thomas, Gary Gregory.
o           Update Java requirement from Java 7 to Java 8. Thanks to Gary Gregory.



Have fun!
-Apache Commons BCEL team

Feedback
--------

Open source works best when you give feedback:

    https://commons.apache.org/bcel

Please direct all bug reports to JIRA:

    https://issues.apache.org/jira/browse/BCEL

Or subscribe to the commons-user mailing list

The Apache Commons Team

-----------------------------------------------------------------------------

              Apache Commons BCEL
                  Version 6.2
                RELEASE NOTES


INTRODUCTION:

The Apache Commons BCEL team is pleased to announce the release of
Apache Commons BCEL 6.2!

The Byte Code Engineering Library (BCEL) is intended to give users a convenient
way to analyze, create, and manipulate compiled .class files. Classes are
represented by objects containing all the symbolic information of the given
class: methods, fields and byte code instructions.

Experimental Java 9 Support

FIXED BUGS:
===========

o BCEL-294: Incorrect comment in StackMap.java Thanks to Mark Roberts.
o BCEL-296: Incorrect comment in several classes. Thanks to Mark Roberts.
o BCEL-295: Fix local variable live range length; add test case. Thanks to Mark Roberts.
o BCEL-300: org.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19.
o BCEL-301: org.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 20.


Have fun!
-Apache Commons BCEL team

Feedback
--------

Open source works best when you give feedback:

    https://commons.apache.org/bcel

Please direct all bug reports to JIRA:

    https://issues.apache.org/jira/browse/BCEL

Or subscribe to the commons-user mailing list

The Apache Commons Team

-----------------------------------------------------------------------------

              Apache Commons BCEL
                  Version 6.1
                RELEASE NOTES


INTRODUCTION:

The Apache Commons BCEL team is pleased to announce the release of
Apache Commons BCEL 6.1!

The Byte Code Engineering Library (BCEL) is intended to give users a convenient
way to analyze, create, and manipulate compiled .class files. Classes are
represented by objects containing all the symbolic information of the given
class: methods, fields and byte code instructions.

Apache Commons BCEL 6.1 is a bugfix and feature release supporting bringing
experimental support for Java 9.

It requires Java 7 or higher to run.


COMPATIBILITY with 6.1
======================

Binary compatible - Yes

Source compatible - Yes, sort of;
 - The org.apache.bcel.classfile.Visitor interface has been enhanced with
 additional methods. If you implemented it directly instead of extending
 the EmptyVisitor class you'll have to implement the new methods.
 - The org.apache.bcel.generic.Visitor interface has been enhanced with an
 additional method. If you implemented it directly instead of extending
 the EmptyVisitor class you'll have to implement the new methods.

Semantic compatible - Yes

For full information about API changes please see the extended Clirr report:


https://commons.apache.org/bcel/clirr-report.html


COMPATIBILITY with Java 9
=========================

The MANIFEST.MF now contains an additional entry:

  Automatic-Module-Name: org.apache.bcel

This should make it possible to use Commons BCEL 6.1 as a module in the Java 9
module system. For more information see the corresponding issue and the
referenced mailing list discussions:

https://issues.apache.org/jira/browse/BCEL-293

The build currently on Java 9 fails with test failures related to Locales. We
are still working on this. For more information see:

https://issues.apache.org/jira/browse/BCEL-275


NEW FEATURES:
=============

o BCEL-293: Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility.
o BCEL-292: Add minimal Java 9 support.

FIXED BUGS:
===========

o BCEL-286: Utility.signatureToString fails if a method has multiple type
            arguments. Thanks to Mark Roberts.
o BCEL-287: IINC does not handle -128 properly. Thanks to Mark Roberts.
o BCEL-283: Support for StackMap should be different from StackMapTable.
            Thanks to Mark Roberts.
o BCEL-289: Crash when parsing constructor of inner classes with parameters
            annotated.
o BCEL-276: LocalVariableTypeTable is not updated.
            Thanks to Sam Yoon, Mark Roberts.
o BCEL-277: Resolving the String representation of a constant throws
            NoSuchElementException in case of CONSTANT_NameAndType constant.
            Thanks to Sam Yoon.


Have fun!
-Apache Commons BCEL team

-----------------------------------------------------------------------------

              Release Notes for 6.0


INTRODUCTION:

The Apache Commons BCEL team is pleased to announce the release of
Apache Commons BCEL 6.0!

The Byte Code Engineering Library (BCEL) is intended to give users a convenient
way to analyze, create, and manipulate compiled .class files. Classes are
represented by objects containing all the symbolic information of the given
class: methods, fields and byte code instructions.

Apache Commons BCEL 6.0 is a major release supporting the new features
introduced in Java 6, 7 and 8.

It requires Java 7 or higher to run.


COMPATIBILITY with 5.2
======================

Binary compatible - not strictly compatible
- The constant interface org.apache.bcel.Constants has been deprecated. Classes
 which implemented this interface in 5.2 now use the constants defined in the
 org.apache.bcel.Const class.
- The constant interface org.apache.bcel.generic.InstructionConstants has been
 deprecated. Classes which implemented this interface in 5.2 now use the
 constants defined in the org.apache.bcel.generic.InstructionConsts class.
- Return type of method 'public java.lang.Object getElementAt(int)' in
 org.apache.bcel.verifier.VerifierFactoryListModel has been changed to
 java.lang.String.
- The BCEL classes do no longer implement java.io.Serializable.

Source compatible - Yes, sort of;
 - The org.apache.bcel.classfile.Visitor interface has been enhanced with
 additional methods. If you implemented it directly instead of extending
 the EmptyVisitor class you'll have to implement the new methods.
 - The org.apache.bcel.generic.Visitor interface has been enhanced with an
 additional method. If you implemented it directly instead of extending
 the EmptyVisitor class you'll have to implement the new methods.

Semantic compatible - Yes, except:
 - BCEL 6.0 handles new attributes such as code annotations that could only
 be processed by implementing a custom AttributeReader in the previous
 versions. Code relying on this behavior will have to be adjusted since
 the AttributeReader will no longer be called in these cases.

For full information about API changes please see the extended Clirr report:


https://commons.apache.org/bcel/clirr-report.html

NEW FEATURES:
=============

o BCEL-272: Add constants for Java 9 class file version 53.

FIXED BUGS:
===========

o BCEL-237: non-empty final arrays should be private as they are mutable.
o BCEL-243: Type.getType() needs to understand TypeVariableSignature(s).
o BCEL-271: FCONST pattern does not include FCONST_2.
o BCEL-264: Add missing Node.accept() implementations (ConstantMethodHandle,
            ConstantMethodType, ParameterAnnotationEntry).
o BCEL-221: BCELifier is not working for Java8Example (incomplete).
o BCEL-195: Addition of hashCode() to generic/Instruction.java breaks Targeters.
            Never make distinct BranchInstructions compare equal.
o BCEL-261: Select constructor allows partially constructed instance to escape.
            Re-ordered code to delay the escape.
o BCEL-259: Minor doc error in BranchInstruction.java.
o BCEL-260: ClassDumper example duplicates field attribute types.
o BCEL-258: No tests to check the output of dump methods.
o BCEL-257: INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL need to define dump()
            methods.
o BCEL-254: Two more methods that would be nice to be public.
o BCEL-245: Type class includes constants that reference subclasses.
o BCEL-253: Pass 3b verifier is too strict.
o BCEL-248: StackMapTable[Entry] should be removed and improvements merged into
            StackMap[Entry].
o BCEL-202: StackMap[Table]Entry.copy() needs to be deep; Improved support for
            StackMaps.
o BCEL-251: Pass3aVerifier visitANEWARRAY() does not allow 255 array dimensions.
o BCEL-249: Check for max Short seems wrong.
o BCEL-208: Need to check for an empty InstructionList.
o BCEL-217: long type instructions are not searched by InstructionFinder using
            regular expression.
o BCEL-239: Interfaces should not be used to define constants.
o BCEL-234: Code must not swallow Throwable.
o BCEL-209: Bug fixes and improvements to InvokeDynamic and BootStrapMethods
            implementation. Thanks to Mark Roberts.
o BCEL-187: Verification error when an invoke references a method defined in
            superclass. Thanks to Jérôme Leroux.
o BCEL-218: Remove ObjectType cache. Thanks to chas.
o BCEL-184: The verifier now checks if methods with a void return type attempt
            to return an object. Thanks to Jérôme Leroux.
o BCEL-207: MethodGen.removeLocalVariable now properly unreference the removed
            variable from the targetters of the instruction handlers delimiting
            the scope of the variable. Thanks to Mark Roberts.
o BCEL-197: Utility.signatureToString() no longer throws a ClassFormatException
            on TypeVariables found in generic signatures. Thanks to Mark Roberts.
o BCEL-194: Removed the 'index' variable from the LocalVariableGen's hash code. Thanks to Mark Roberts.
o BCEL-193: The verifier should not check for run time compatibility of objects
            assigned to arrays. Thanks to Jérôme Leroux.
o BCEL-188: Correct verification of the return value of a method. Thanks to Jérôme Leroux.
o BCEL-186: Performance degradation with the UTF8 cache. getInstance no longer
            uses cache.
o BCEL-181: org.apache.bcel.util.ClassLoaderRepository.loadClass(String) leaks
            input streams.
o BCEL-28:  Mistake in "Peephole optimizer" example
            at https://commons.apache.org/bcel/manual.html
o BCEL-74:  BCEL cannot be used as java.system.class.loader.
o BCEL-77:  XSLT transforms broken in Turkish Locale.
o BCEL-79:  java.lang.ClassFormatError: LVTT entry for 'local' in class file
            org/shiftone/jrat/test/dummy/CrashTestDummy does not match any LVT
            entry
o BCEL-81:  ClassParser.parse() throws NullPointerException if class does not
            exist and ClassParser(String) constructor is used.
o BCEL-85:  ArrayOutOfBoundsException in InstructionFinder.
o BCEL-87:  Website: Incorrect URL for source; version 5.2 is not in the bug
            page
o BCEL-88:  bcelified method doesn't pass verification.
o BCEL-89:  return type not verified by JustIce.
o BCEL-94:  @since tag incorrect for Annotation classes in BCEL trunk.
o BCEL-95:  InstructionFactory missing % operator for Float, Double.
o BCEL-96:  Fields in Annotations and AnnotationEntry are inaccessible to
            subclasses
o BCEL-97:  Add support for getResources to ClassPath.
o BCEL-98:  Two source files in repository are empty.
o BCEL-99:  Maven POM file calls in apache regex but code does not use it.
o BCEL-100: ClassParser throws unintelligible Exception.
o BCEL-101: verifier raises an AssertionViolatedException when done against
            Java 5 files with generics/annotations.
o BCEL-102: Verifier fails in pass 2 with "Number of LocalVariableTable
            attributes of Code attribute" on static methods.
o BCEL-107: ParameterAnnotationEntries are read not dumped.
o BCEL-108: RuntimeVisible Annotations duplicated.
o BCEL-112: ARRAYLENGTH incorrectly not StackConsumer.
o BCEL-114: Error in method search() defined in
            org.apache.bcel.util.InstructionFinder
o BCEL-115: Deleting all instructions of a list shows wrong behavior.
o BCEL-120: Make BCEL JAR OSGi compatible.
o BCEL-122: ArrayIndexOutOfBoundsException thrown from TABLESWITCH.initFromFile.
o BCEL-124: tableswitch/lookupswitch invalid alignment of 4-byte operands.
o BCEL-125: Incorrect size calculation in InstructionFinder.
o BCEL-130: Class files containing "ParameterAnnotations" are dumped
            incorrectly.
o BCEL-131: Class files containing "StackMapTable" attributes (on method code)
            are dumped incorrectly.
o BCEL-132: org.apache.bcel.classfile.ClassParser: NullPointerException caused
            by fileopen failed.
o BCEL-133: org.apache.bcel.classfile.ClassParser: NullPointerException caused
            by invalid filename.
o BCEL-134: ExecutionVisitor doesn't support Class constant type for LDC and
            LDC_W.
o BCEL-135: BCELifier issue: BCELFactory fails to handle float and long
            constants.
o BCEL-137: "Invalid method signature: TT;" when using MethodGen for a method
            having a generic parameter.
o BCEL-138: FieldInstruction.getFieldSize() doesn't decode Type.getTypeSize()
            output.
o BCEL-140: org.apache.bcel.generic.Instruction.equals(Object) does not follow
            Object.equals(Object) rules.
o BCEL-141: Select instructions should implement StackConsumer instead of
            StackProducer.
o BCEL-143: Fix CPL License issues with EnclosingMethod.java and
            LocalVariableTypeTable.java.
o BCEL-145: Type.getReturnTypeSize() doesn't decode Type.getTypeSize() output.
o BCEL-146: SyntheticRepository.loadClass() fails to close the inputStream.
o BCEL-148: BCELifier produces incorrect code for methods containing loads of
            class literals from constant pool.
o BCEL-151: Code attribute size not updated.
o BCEL-152: Incorrect link for Jasmin assembler language.
o BCEL-153: Examples not present in source or binary downloads.
o BCEL-154: ClassParser.parse() generates NPE if it cannot open the file.
o BCEL-155: InstConstraintVisitor does not handle class constants.
o BCEL-156: Pass3bVerifier crashes on empty methods.
o BCEL-159: LocalVariableGen.getLocalVariable() computes incorrect length.
o BCEL-164: Method does not have a method to access parameter annotations.
o BCEL-167: ClassPath.getResource does not correctly perform URL escaping.
o BCEL-173: ClassParser fails to parse JDK classes in Java 8:
            ClassFormatException: Invalid byte tag in constant pool.
o BCEL-174: Verification of interfaces with default methods fails with Java 8.
o BCEL-177: When reading the number of parameters in a MethodParameters
            structure only read a single byte as per the JVM specification.

CHANGES:
========

o BCEL-262: InvokeInstruction.getClassName(ConstantPoolGen) should not throw 
            an exception when it detects an array. Thanks to Mark Roberts.
o BCEL-230: Document the Java platform requirement clearly and early.
o BCEL-211: Some additional clone methods should be public.
o BCEL-127: Document that Instruction Factory returns singleton instances.
o BCEL-198: better support for clone/copy methods.
o BCEL-201: modify several toString methods to make output similar to "javap".
o BCEL-205: add javadoc comments to LineNumber.java and LineNumberTable.java.
o BCEL-212: Inconsistent toString() results.
o BCEL-244: Update Java requirement from 5 to 7.
o BCEL-219: Make org.apache.bcel.classfile.ConstantPool.ConstantPool(DataInput)
            public. Thanks to Maxim Degtyarev.
o BCEL-76:  Add parent type processing for ClassPath class.
o BCEL-83:  Add support for getResource and getResourceAsStream to ClassPath.
o BCEL-92:  Properly parse StackMapTable attributes in Java 6 classfiles.
o BCEL-104: Javadoc overhaul.
o BCEL-119: BCEL is unnecessarily slow.
o BCEL-157: Add support for INVOKEDYNAMIC and MethodHandles.
o BCEL-160: Why using unstable sort at MethodGen.getLocalVariables() ?
o BCEL-163: Incorporate patch file from Findbugs.
o BCEL-175: Implement the MethodParameters attribute.

REMOVED:
========
o BCEL-242: Remove Serializable.
o BCEL-110: Problem with JAXB if the bcel classloader is used; remove the broken
            ClassLoader class.


Have fun!
-Apache Commons BCEL team

Feedback
--------

Open source works best when you give feedback:

    https://commons.apache.org/bcel

Please direct all bug reports to JIRA:

    https://issues.apache.org/jira/browse/BCEL

Or subscribe to the commons-user mailing list

The Apache Commons Team
