<?xml version="1.0" encoding="UTF-8"?>
<!--

   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.

-->
<!--
This file is also used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the 
release process easy :-).

2.  Do a JIRA search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits. TBA how to use this with SVN.

To generate the release notes from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the formatting if necessary 
and commit

The <action> type attribute can be add,update,fix,remove.
-->

<document>
  <properties>
    <title>Changes</title>
    <author email="dev@commons.apache.org">Apache Commons developers</author>
  </properties>

  <!-- NOTE: 
  The description below is specially formatted so as to improve the layout of the generated release notes:
  The parsing process removes all line feeds, replacing them with a single space.
  The Velocity template in resources/templates has been enhanced to replace pairs of adjacent spaces
  with a new-line in the release notes. (These spaces are ignored when displaying HTML).
  If the output is not quite correct, check for invisible trailing spaces!
  
  N.B. The release notes template groups actions by type, and only extracts data for the current release.
  The changes report outputs actions in the order they appear in this file.
  
  To regenerate the release notes:
  mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

  Defining changes.version allows one to create the RN without first removing the SNAPSHOT suffix.
   -->

  <body>
    <release version="6.1" date="tba" description="tba">
      <action issue="BCEL-277" type="fix" dev="britter" due-to="Sam Yoon">Resolving the String representation of a constant throws NoSuchElementException in case of CONSTANT_NameAndType constant.</action>
    </release>

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