              Apache Commons BCEL
                  Version 6.0
                RELEASE NOTES


INTRODUCTION:

The Apache Commons 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.

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/bcel5-bcel6-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-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-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
