1 Apache Commons BCEL 2 Version 6.2 3 RELEASE NOTES 4 5 6INTRODUCTION: 7 8The Apache Commons BCEL team is pleased to announce the release of 9Apache Commons BCEL 6.2! 10 11The Byte Code Engineering Library (BCEL) is intended to give users a convenient 12way to analyze, create, and manipulate compiled .class files. Classes are 13represented by objects containing all the symbolic information of the given 14class: methods, fields and byte code instructions. 15 16Experimental Java 9 Support 17 18FIXED BUGS: 19=========== 20 21o BCEL-294: Incorrect comment in StackMap.java Thanks to Mark Roberts. 22o BCEL-296: Incorrect comment in several classes. Thanks to Mark Roberts. 23o BCEL-295: Fix local variable live range length; add test case. Thanks to Mark Roberts. 24o BCEL-300: org.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19. 25o BCEL-301: org.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 20. 26 27 28Have fun! 29-Apache Commons BCEL team 30 31Feedback 32-------- 33 34Open source works best when you give feedback: 35 36 http://commons.apache.org/bcel 37 38Please direct all bug reports to JIRA: 39 40 https://issues.apache.org/jira/browse/BCEL 41 42Or subscribe to the commons-user mailing list 43 44The Apache Commons Team 45 46----------------------------------------------------------------------------- 47 48 Apache Commons BCEL 49 Version 6.1 50 RELEASE NOTES 51 52 53INTRODUCTION: 54 55The Apache Commons BCEL team is pleased to announce the release of 56Apache Commons BCEL 6.1! 57 58The Byte Code Engineering Library (BCEL) is intended to give users a convenient 59way to analyze, create, and manipulate compiled .class files. Classes are 60represented by objects containing all the symbolic information of the given 61class: methods, fields and byte code instructions. 62 63Apache Commons BCEL 6.1 is a bugfix and feature release supporting bringing 64experimental support for Java 9. 65 66It requires Java 7 or higher to run. 67 68 69COMPATIBILITY with 6.1 70====================== 71 72Binary compatible - Yes 73 74Source compatible - Yes, sort of; 75 - The org.apache.bcel.classfile.Visitor interface has been enhanced with 76 additional methods. If you implemented it directly instead of extending 77 the EmptyVisitor class you'll have to implement the new methods. 78 - The org.apache.bcel.generic.Visitor interface has been enhanced with an 79 additional method. If you implemented it directly instead of extending 80 the EmptyVisitor class you'll have to implement the new methods. 81 82Semantic compatible - Yes 83 84For full information about API changes please see the extended Clirr report: 85 86 87http://commons.apache.org/bcel/clirr-report.html 88 89 90COMPATIBILITY with Java 9 91========================= 92 93The MANIFEST.MF now contains an additional entry: 94 95 Automatic-Module-Name: org.apache.bcel 96 97This should make it possible to use Commons BCEL 6.1 as a module in the Java 9 98module system. For more information see the corresponding issue and the 99referenced mailing list discussions: 100 101https://issues.apache.org/jira/browse/BCEL-293 102 103The build currently on Java 9 fails with test failures related to Locales. We 104are still working on this. For more information see: 105 106https://issues.apache.org/jira/browse/BCEL-275 107 108 109NEW FEATURES: 110============= 111 112o BCEL-293: Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility. 113o BCEL-292: Add minimal Java 9 support. 114 115FIXED BUGS: 116=========== 117 118o BCEL-286: Utility.signatureToString fails if a method has multiple type 119 arguments. Thanks to Mark Roberts. 120o BCEL-287: IINC does not handle -128 properly. Thanks to Mark Roberts. 121o BCEL-283: Support for StackMap should be different from StackMapTable. 122 Thanks to Mark Roberts. 123o BCEL-289: Crash when parsing constructor of inner classes with parameters 124 annotated. 125o BCEL-276: LocalVariableTypeTable is not updated. 126 Thanks to Sam Yoon, Mark Roberts. 127o BCEL-277: Resolving the String representation of a constant throws 128 NoSuchElementException in case of CONSTANT_NameAndType constant. 129 Thanks to Sam Yoon. 130 131 132Have fun! 133-Apache Commons BCEL team 134 135----------------------------------------------------------------------------- 136 137 Release Notes for 6.0 138 139 140INTRODUCTION: 141 142The Apache Commons BCEL team is pleased to announce the release of 143Apache Commons BCEL 6.0! 144 145The Byte Code Engineering Library (BCEL) is intended to give users a convenient 146way to analyze, create, and manipulate compiled .class files. Classes are 147represented by objects containing all the symbolic information of the given 148class: methods, fields and byte code instructions. 149 150Apache Commons BCEL 6.0 is a major release supporting the new features 151introduced in Java 6, 7 and 8. 152 153It requires Java 7 or higher to run. 154 155 156COMPATIBILITY with 5.2 157====================== 158 159Binary compatible - not strictly compatible 160- The constant interface org.apache.bcel.Constants has been deprecated. Classes 161 which implemented this interface in 5.2 now use the constants defined in the 162 org.apache.bcel.Const class. 163- The constant interface org.apache.bcel.generic.InstructionConstants has been 164 deprecated. Classes which implemented this interface in 5.2 now use the 165 constants defined in the org.apache.bcel.generic.InstructionConsts class. 166- Return type of method 'public java.lang.Object getElementAt(int)' in 167 org.apache.bcel.verifier.VerifierFactoryListModel has been changed to 168 java.lang.String. 169- The BCEL classes do no longer implement java.io.Serializable. 170 171Source compatible - Yes, sort of; 172 - The org.apache.bcel.classfile.Visitor interface has been enhanced with 173 additional methods. If you implemented it directly instead of extending 174 the EmptyVisitor class you'll have to implement the new methods. 175 - The org.apache.bcel.generic.Visitor interface has been enhanced with an 176 additional method. If you implemented it directly instead of extending 177 the EmptyVisitor class you'll have to implement the new methods. 178 179Semantic compatible - Yes, except: 180 - BCEL 6.0 handles new attributes such as code annotations that could only 181 be processed by implementing a custom AttributeReader in the previous 182 versions. Code relying on this behavior will have to be adjusted since 183 the AttributeReader will no longer be called in these cases. 184 185For full information about API changes please see the extended Clirr report: 186 187 188http://commons.apache.org/bcel/clirr-report.html 189 190NEW FEATURES: 191============= 192 193o BCEL-272: Add constants for Java 9 class file version 53. 194 195FIXED BUGS: 196=========== 197 198o BCEL-237: non-empty final arrays should be private as they are mutable. 199o BCEL-243: Type.getType() needs to understand TypeVariableSignature(s). 200o BCEL-271: FCONST pattern does not include FCONST_2. 201o BCEL-264: Add missing Node.accept() implementations (ConstantMethodHandle, 202 ConstantMethodType, ParameterAnnotationEntry). 203o BCEL-221: BCELifier is not working for Java8Example (incomplete). 204o BCEL-195: Addition of hashCode() to generic/Instruction.java breaks Targeters. 205 Never make distinct BranchInstructions compare equal. 206o BCEL-261: Select constructor allows partially constructed instance to escape. 207 Re-ordered code to delay the escape. 208o BCEL-259: Minor doc error in BranchInstruction.java. 209o BCEL-260: ClassDumper example duplicates field attribute types. 210o BCEL-258: No tests to check the output of dump methods. 211o BCEL-257: INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL need to define dump() 212 methods. 213o BCEL-254: Two more methods that would be nice to be public. 214o BCEL-245: Type class includes constants that reference subclasses. 215o BCEL-253: Pass 3b verifier is too strict. 216o BCEL-248: StackMapTable[Entry] should be removed and improvements merged into 217 StackMap[Entry]. 218o BCEL-202: StackMap[Table]Entry.copy() needs to be deep; Improved support for 219 StackMaps. 220o BCEL-251: Pass3aVerifier visitANEWARRAY() does not allow 255 array dimensions. 221o BCEL-249: Check for max Short seems wrong. 222o BCEL-208: Need to check for an empty InstructionList. 223o BCEL-217: long type instructions are not searched by InstructionFinder using 224 regular expression. 225o BCEL-239: Interfaces should not be used to define constants. 226o BCEL-234: Code must not swallow Throwable. 227o BCEL-209: Bug fixes and improvements to InvokeDynamic and BootStrapMethods 228 implementation. Thanks to Mark Roberts. 229o BCEL-187: Verification error when an invoke references a method defined in 230 superclass. Thanks to Jérôme Leroux. 231o BCEL-218: Remove ObjectType cache. Thanks to chas. 232o BCEL-184: The verifier now checks if methods with a void return type attempt 233 to return an object. Thanks to Jérôme Leroux. 234o BCEL-207: MethodGen.removeLocalVariable now properly unreference the removed 235 variable from the targetters of the instruction handlers delimiting 236 the scope of the variable. Thanks to Mark Roberts. 237o BCEL-197: Utility.signatureToString() no longer throws a ClassFormatException 238 on TypeVariables found in generic signatures. Thanks to Mark Roberts. 239o BCEL-194: Removed the 'index' variable from the LocalVariableGen's hash code. Thanks to Mark Roberts. 240o BCEL-193: The verifier should not check for run time compatibility of objects 241 assigned to arrays. Thanks to Jérôme Leroux. 242o BCEL-188: Correct verification of the return value of a method. Thanks to Jérôme Leroux. 243o BCEL-186: Performance degradation with the UTF8 cache. getInstance no longer 244 uses cache. 245o BCEL-181: org.apache.bcel.util.ClassLoaderRepository.loadClass(String) leaks 246 input streams. 247o BCEL-28: Mistake in "Peephole optimizer" example 248 at http://commons.apache.org/bcel/manual.html 249o BCEL-74: BCEL cannot be used as java.system.class.loader. 250o BCEL-77: XSLT transforms broken in Turkish Locale. 251o BCEL-79: java.lang.ClassFormatError: LVTT entry for 'local' in class file 252 org/shiftone/jrat/test/dummy/CrashTestDummy does not match any LVT 253 entry 254o BCEL-81: ClassParser.parse() throws NullPointerException if class does not 255 exist and ClassParser(String) constructor is used. 256o BCEL-85: ArrayOutOfBoundsException in InstructionFinder. 257o BCEL-87: Website: Incorrect URL for source; version 5.2 is not in the bug 258 page 259o BCEL-88: bcelified method doesn't pass verification. 260o BCEL-89: return type not verified by JustIce. 261o BCEL-94: @since tag incorrect for Annotation classes in BCEL trunk. 262o BCEL-95: InstructionFactory missing % operator for Float, Double. 263o BCEL-96: Fields in Annotations and AnnotationEntry are inaccessible to 264 subclasses 265o BCEL-97: Add support for getResources to ClassPath. 266o BCEL-98: Two source files in repository are empty. 267o BCEL-99: Maven POM file calls in apache regex but code does not use it. 268o BCEL-100: ClassParser throws unintelligible Exception. 269o BCEL-101: verifier raises an AssertionViolatedException when done against 270 Java 5 files with generics/annotations. 271o BCEL-102: Verifier fails in pass 2 with "Number of LocalVariableTable 272 attributes of Code attribute" on static methods. 273o BCEL-107: ParameterAnnotationEntries are read not dumped. 274o BCEL-108: RuntimeVisible Annotations duplicated. 275o BCEL-112: ARRAYLENGTH incorrectly not StackConsumer. 276o BCEL-114: Error in method search() defined in 277 org.apache.bcel.util.InstructionFinder 278o BCEL-115: Deleting all instructions of a list shows wrong behaviour. 279o BCEL-120: Make BCEL JAR OSGi compatible. 280o BCEL-122: ArrayIndexOutOfBoundsException thrown from TABLESWITCH.initFromFile. 281o BCEL-124: tableswitch/lookupswitch invalid alignment of 4-byte operands. 282o BCEL-125: Incorrect size calculation in InstructionFinder. 283o BCEL-130: Class files containing "ParameterAnnotations" are dumped 284 incorrectly. 285o BCEL-131: Class files containing "StackMapTable" attributes (on method code) 286 are dumped incorrectly. 287o BCEL-132: org.apache.bcel.classfile.ClassParser: NullPointerException caused 288 by fileopen failed. 289o BCEL-133: org.apache.bcel.classfile.ClassParser: NullPointerException caused 290 by invalid filename. 291o BCEL-134: ExecutionVisitor doesn't support Class constant type for LDC and 292 LDC_W. 293o BCEL-135: BCELifier issue: BCELFactory fails to handle float and long 294 constants. 295o BCEL-137: "Invalid method signature: TT;" when using MethodGen for a method 296 having a generic parameter. 297o BCEL-138: FieldInstruction.getFieldSize() doesn't decode Type.getTypeSize() 298 output. 299o BCEL-140: org.apache.bcel.generic.Instruction.equals(Object) does not follow 300 Object.equals(Object) rules. 301o BCEL-141: Select instructions should implement StackConsumer instead of 302 StackProducer. 303o BCEL-143: Fix CPL License issues with EnclosingMethod.java and 304 LocalVariableTypeTable.java. 305o BCEL-145: Type.getReturnTypeSize() doesn't decode Type.getTypeSize() output. 306o BCEL-146: SyntheticRepository.loadClass() fails to close the inputStream. 307o BCEL-148: BCELifier produces incorrect code for methods containing loads of 308 class literals from constant pool. 309o BCEL-151: Code attribute size not updated. 310o BCEL-152: Incorrect link for Jasmin assembler language. 311o BCEL-153: Examples not present in source or binary downloads. 312o BCEL-154: ClassParser.parse() generates NPE if it cannot open the file. 313o BCEL-155: InstConstraintVisitor does not handle class constants. 314o BCEL-156: Pass3bVerifier crashes on empty methods. 315o BCEL-159: LocalVariableGen.getLocalVariable() computes incorrect length. 316o BCEL-164: Method does not have a method to access parameter annotations. 317o BCEL-167: ClassPath.getResource does not correctly perform URL escaping. 318o BCEL-173: ClassParser fails to parse JDK classes in Java 8: 319 ClassFormatException: Invalid byte tag in constant pool. 320o BCEL-174: Verification of interfaces with default methods fails with Java 8. 321o BCEL-177: When reading the number of parameters in a MethodParameters 322 structure only read a single byte as per the JVM specification. 323 324CHANGES: 325======== 326 327o BCEL-262: InvokeInstruction.getClassName(ConstantPoolGen) should not throw 328 an exception when it detects an array. Thanks to Mark Roberts. 329o BCEL-230: Document the Java platform requirement clearly and early. 330o BCEL-211: Some additional clone methods should be public. 331o BCEL-127: Document that Instruction Factory returns singleton instances. 332o BCEL-198: better support for clone/copy methods. 333o BCEL-201: modify several toString methods to make output similar to "javap". 334o BCEL-205: add javadoc comments to LineNumber.java and LineNumberTable.java. 335o BCEL-212: Inconsistent toString() results. 336o BCEL-244: Update Java requirement from 5 to 7. 337o BCEL-219: Make org.apache.bcel.classfile.ConstantPool.ConstantPool(DataInput) 338 public. Thanks to Maxim Degtyarev. 339o BCEL-76: Add parent type processing for ClassPath class. 340o BCEL-83: Add support for getResource and getResourceAsStream to ClassPath. 341o BCEL-92: Properly parse StackMapTable attributes in Java 6 classfiles. 342o BCEL-104: Javadoc overhaul. 343o BCEL-119: BCEL is unnecessarily slow. 344o BCEL-157: Add support for INVOKEDYNAMIC and MethodHandles. 345o BCEL-160: Why using unstable sort at MethodGen.getLocalVariables() ? 346o BCEL-163: Incorporate patch file from Findbugs. 347o BCEL-175: Implement the MethodParameters attribute. 348 349REMOVED: 350======== 351o BCEL-242: Remove Serializable. 352o BCEL-110: Problem with JAXB if the bcel classloader is used; remove the broken 353 ClassLoader class. 354 355 356Have fun! 357-Apache Commons BCEL team 358 359Feedback 360-------- 361 362Open source works best when you give feedback: 363 364 http://commons.apache.org/bcel 365 366Please direct all bug reports to JIRA: 367 368 https://issues.apache.org/jira/browse/BCEL 369 370Or subscribe to the commons-user mailing list 371 372The Apache Commons Team 373