              Apache Commons BCEL
                  Version 6.3-SNAPSHOT
                RELEASE NOTES


INTRODUCTION:

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

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:

    http://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:

    http://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:


http://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:


http://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 http://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 behaviour.
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:

    http://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
