 | 
ASM
|
History
14 October 2012: ASM 4.1 (svn-tag: ASM_4_1)
- implicit first frame no longer visited with
EXPAND_FRAMES (was necessary to fix bug 316360).
- performance improvements in ClassReader (about +10
percent speedup).
- feature requests
- 316306: More efficient patch for Frame.merge().
- 316318: Allow generated SVUID field to be marked
synthetic.
- 316321: asm osgi bundles based on BND.
- Moved checkClassSignature, checkMethodSignature and
checkFieldSignature to CheckClassAdapter and made them public.
- 316345: Support "synthetic" access modifier in
org.objectweb.asm.util.Textifier.appendAccess()
- bug fixes
- 316360: MethodWriter.visitFrame(F_NEW,...) requires
explicit invocation for the implicit frame at offset zero.
- 316352: LocalVariableSorter.visitFrame() logic is
incorrect.
- 316326: analysis.Frame.merge() should use !
.equals() instead of !=.
- Fix regression: LDC with a primitive class doesn't
work anymore.
- 316347: GeneratorAdaptor.ifCmp() generates
DCMPG/DCMPL incorrectly.
- 316348: ClassVersion check in ClassReader looks at
wrong offset.
- 316359: ClassWriter toByteArray fails when there are
more than 32k constant pool entries.
29 October 2011: ASM 4.0 (svn-tag: ASM_4_0)
- added automatic test of backward binary compatibility
in build process.
- added automatic call to resetLabel in MethodNode when
necessary.
- improved printing of method handles in Textifier.
- bug fixes
- 316204 Analyzer produces incorrect lvt types for
jsr return targets when jsr frame changes twice during
analysis.
- 316212 org.objectweb.asm.optimizer.ClassOptimizer
does not work with classes in default package.
- fixed incorrectly ASMified method handles.
11 September 2011: ASM 4.0 RC2 (svn-tag: ASM_4_0_RC2)
- ClassVisitor, MethodVisitor, etc interfaces replaced
with abstract classes, in order to ensure backward
binary compatibility in future ASM versions.
- ClassAdapter and MethodAdapter merged into ClassVisitor
and MethodVisitor, classes using multiple interface inheritance
removed (e.g. MemberNode, EmptyVisitor) or adapted (e.g. trace
and asmifier classes in asm.util).
- MethodHandle and MethodType renamed to Handle and Type.
- improved getCommonSuperClass to avoid resolving loaded classes.
- improved getCommonSuperClass in ClassWriterComputeFramesTest
(more efficient).
- new checks in CheckClassAdapter.
- new example, showing how to use the new invokedynamic
instruction.
- bug fixes
- 315942 asm-xml.dtd fails to mention SWAP element
- 315984 asm-xml.dtd fails to mention FREM element
- NOP ATHROW bug (compute frames failed on deadcode in exception handler range)
- fixed bugs found with FindBugs
- minor Javadoc improvements and fixes
- feature requests
- 316005 Constant pool access
- 313999 Maven POM should include source-code
- patch from Ivo Anjo in Analyzer
17 April 2011: ASM 4.0 RC1 (svn-tag: ASM_4_0_RC1)
- full support of Java 7
- support of the new invokedynamic encoding and bootstrap method arguments. Done with a
new visitInvokeDynamicInsn method.
- added two new classes MethodHandle and MethodType. Can be used either in visitLdcInsn
or as last arguments of visitInvokeDynamicInsn.
- generified the API to use generics and varargs. However, almost all jars are still
small and 1.2 compatible.
21 December 2010: ASM 3.3.1 (svn-tag: ASM_3_3_1)
- bug fixes
- 315135 COMPUTE_FRAMES with CheckClassAdapter gives IndexOutOfBoundsException
- 315248 Bug in CheckClassAdapter? Fails for untransformed class
- 315399 AnalyzerAdapter.execute() method doesn't process null array correctly for AALOAD instruction
- 315417 LocalVariablesSorter.remap() incorrectly process long/double types
- 315697 DependencyTracker example fails in handling class Object
- 315698 DependencyTracker example fails in handling finally blocks
30 May 2010: ASM 3.3 (svn-tag: ASM_3_3)
- added new InstructionAdapter class
- added TryCatchBlockSorter (provided by Adrian Sampson)
- improved extensibility of analysis package (patch from Markus Heiden)
- bug fixes
- 314969 Counterintuitive interaction of arguments to ClassWriter(cr, flags)
- 314964 AnalyzerAdapter does not treat <init> calls correctly
- 314934 ASM Handling of method Synthetic attribute causes exception during retransformation
- 314878 NPE in AnalyzerAdapter, putfield object comes from different control flow branches
- fixed bug with remapping of RET instructions
- 314563 exception from asm.commons.LocalVariablesSorterremap
- fixed bug in GASMifier
- fixed bug for F_CHOP frames (locals are ignored for these frames)
- 314719 method length is sometimes calculated incorrectly
- 314584 ByteCode Outline Eclipse Plugin -- access flags comment is showing in decimal rather than hex
- 314481 Bug in Remapper related to annotations
- 314486 SerialVersionUIDAdder generates an incorrect serialVersionUID under 1.6 VMs for anonymous classes
- fixed bug with padding for xxxSwitch instructions
- 313909 VOID_TYPE.getSize() != 0
- 312464 ClassReader does not ensure that NEW has a label associated with it
- patches (minor code improvements)
- 314328 minor improvement to serialveruidadder
- 314329 unnecessary casting, using HashMap v. Map
- 314330 make sure files get closed
- feature requests
- 314119 Provide read access to uninitializedTypes in AnalyzerAdapter
- 313804 Improve analysis results
- Javadoc fixes and improvements
11 June 2009: ASM 3.2 (svn-tag: ASM_3_2)
- added support for new invokedynamic opcode
- added new Type.getArgumentsAndReturnSizes method
- added new GeneratorAdapter.valueOf method
- added two new Method.getMethod methods (feature request #308554)
- added new checks in Check*Adapter
- check of xRETURN instructions against declared method return type
- check that labels are not reused across methods (inside same class; check for labels reuse across classes still missing)
- checks for debug labels and for visitTryCatchBlock calling order
- new option for data flow checks with BasicVerifier
- added Jasmin class adapter (with round trip tests) in examples
- bug fixes
- 313314 ClassReader.readClass(InputStream) unnecessary copies read buffer two times
- 311642 StackOverflowException in Label.visitSubroutine
- 311100 patch to make verifying multiple classes easier
- 309819 java/lang/Character typo in GeneratorAdapter
- 312468 Incorrect merging of frames
- 309037 GeneratorAdapter generates jump instructions wrongly
- 308875 ClassWriter COMPUTE_MAXS produces invalid class (verify error)
- 308807 AnalyzerException running CheckClassAdapter.verify() on java.lang.String
- 308745 BasicInterpreter.newOperation lacks a throws AnalyzerException clause
- fixed bug submitted by Simon Goldsmith for inner classes
- fixed bug submitted by Michael Rudolf
- fixed bug with usage of copyOperation
- fixed bug in test case
- Javadoc fixes and improvements
- added performance tests with JBET, JClassLib, Jiapi, mozilla.classfile, BCEL and AspectJ BCEL using HelloWorld example
- added performance tests with Cojen library
- added performance tests for gnu.bytecode and CSG bytecode using HelloWorld example
- added FindBugs preferences and builder for ASM
- added debug jar
- improved Ant build scripts
- replaced ow_util_ant_tasks (no longer maintained) with standard ant tasks
- updated test/lib jars with newer versions
- removed hardcoded JUNIT Eclipse path, made JSE 1.5.0 container as default VM (previously random system JRE)
- added license info to the parent pom
29 October 2007: ASM 3.1 (cvs-tag: ASM_3_1)
- extended semantic of 'internal name' to array classes (internal
name equal to descriptor in this case); renamed 'desc' parameter of
'visitTypeInsn' to 'type'
- new readLabel method in ClassReader
- new getLabelNode method in MethodNode (see bug 306920)
- new resetLabel(s) methods in LabelNode and InsnList (feature
request 306499)
- new checks in CheckMethodVisitor (for stack frames)
- new CheckSignatureAdapter class
- new Remapper* classes in commons
- support for primitive types in GeneratorAdaptor.push (feature
request 307378)
- new build options (no writer, no frames support, etc)
- new tests
- bug fixes
- 307600 StackOverflowError in org.objectweb.asm.MethodWriter.findSubroutine()
- 307392 MethodWriter generates invalid RuntimeInvisibleParameterAnnotations
for enum constructors
- 307242 Patch to compile ASM 2.2.3 against Java 1.4
- 307011 Typo error in ASM 3.0 User Guide
- 306921 SignatureReader does not handle inner class extends of
other inner class
- 306920 MethodNode.labelNode(label) smashes "user" data Label.info
- 306521 Parameter local of visitFrame() is lost when using a ClassNode
- 306503 CheckClassAdapter doesn't flush its output
- 306422 Another code cleanup patch
- 306349 SerialVersionUIDAdder breaks compile if using JDK 1.4
- bug fix related to xSTORE in tree.analysis.Frame
- bug fix in LocalVariableSorter
- javadoc fixes
1 November 2006: ASM 3.0 (cvs-tag: ASM_3_0)
- visit*Annotation methods can now return null
- COMPUTE_MAXS now works with all subroutines, even very weird ones
that cannot be produced by javac
- new getters in ClassReader, SKIP_DEBUG now skips visitSource
- new methods in Type: getObjectType, getConstructorDescriptor
- InsnList now supports ListIterator interface
- new insertBefore() and insert*() methods in InsnList class
- improved Analyzer API, support for abstract and native methods
- improved Method class behavior with default package
- minor bug fixes
- 305716 bug in floating point constant handling in constant pool
writing
- 305917 optimizer.ClassConstantsCollector generates an invalid
class constant
- 306058 FieldNode.accept() cannot handle ClassVisitors yielding
null as FieldVisitor
- new tests
- javadoc improvements
06 July 2006: ASM 3.0 RC1 (cvs-tag: ASM_3_0_RC1)
- new API for instruction lists in tree package
- new JSRInliner class in commons
- new CodeSizeEvaluator class in commons
- changes and optimizations in AnalyzerAdapter
- DataflowInterpreter renamed into SourceInterpreter
- port of changes from ASM 2.x
06 July 2006: ASM 2.2.3 (cvs-tag: ASM_2_2_3)
- compute maxs option now takes visitLocalVariable into account
- bug fix in TraceSignatureVisitor
- minor Javadoc improvements
20 April 2006: ASM 3.0 beta2 (cvs-tag: ASM_3_0_BETA2)
- visitFrame is now called after visitLabel in ClassReader
- new SKIP_FRAMES and SKIP_CODE flags in ClassReader
- fixed issue with dead code and COMPUTE_FRAMES option in ClassWriter
- port of bug fixes from ASM_2_2_2
- refactorings in core package to get same performances as in ASM 2.x
(3.0 beta was slightly less performant than 2.x)
- refactored tests and added many new tests. Tests now cover 100%
of the code, except in commons package.
7 April 2006: ASM 2.2.2 (cvs-tag: ASM_2_2_2)
- bug fix in ClassWriter for SourceDebugExtension attribute
- bug fix in LocalVariableSorter when same variable slot is used to
save different types
- all fields in classes ClassNode, MethodNode, LookupSwitchInsnNode
and TableSwitchInsnNode of the tree package are mutable (non-final)
- additional checks in CheckClassAdapter, CheckMethodAdapter and
CheckAnnotationAdapter
- new constructor in SimpleVerifier with list of interfaces of the
class being verified to allow isAssignableFrom check without
loading this class (which may be invalid)
14 December 2005: ASM 3.0 beta (cvs-tag: ASM_3_0_BETA)
- Major changes for the new Java 6 StackMapTable attribute
- StackMapTable support integrated in core package (new
visitFrame method in MethodVisitor)
- asm.attrs package removed
- new commons.AnalyzerAdapter class
- incremental stack map frames update in LocalVariablesSorter
- ClassReader and ClassWriter constructors changed
- ...
14 December 2005: ASM 2.2.1 (cvs-tag: ASM_2_2_1)
- bug fix in ClassReader for empty annotation array values
- new accept method in MethodNode
- new checks in asm.util
- performance optimizations in LocalVariablesSorter
- more precise type system used in analysis package
- javadoc fixes and improvements
24 November 2005: ASM 2.2 (cvs-tag: ASM_2_2)
- pass through behavior for unknown attributes
- optimizations for "mostly add" transformations (new ClassWriter constructor)
- removed constraint for visitTryCatchBlock call order with respect to visitLabel
- visitTryCatchBlock can be called before or after its labels are visited
- ClassReader now calls visitTryCatchBloc at the beginning of the method body
- new AdviceAdapter class in commons
- new constructor in GeneratorAdapter for better integration with the plain visitors/adapters
- fixed potential endles loop in IntMap.get()
- bug fixes in xml package
- improved javadocs (commons, tree)
- new tests
- corbertura added to the build
25 August 2005: ASM 2.1 (cvs-tag: ASM_2_1)
- support for StackMapTable attribute in asm.attrs
- restructured StackMap attribute implementation (SM and SMT are using the same frames)
- addition of Traceable interface in asm.util.attrs
- new "dependencies" example
- improved commons.Method
- deprecated asm.tree.Insn.getByOpcode()
- public constructor in InsnNode
- better exception handling in analyzer
- added Opcodes.V1_6 constant
- javadoc improvements
- changed code style (Eclipse formatter + Sun conventions with minor changes)
- asm-all jar
- bug fixes
- correct handling of synthetic attribute vs. synthetic flag
- bug in TraceClassVisitor
- bug in analyzer.Frame for ASTORE
- added BasicValue.hashCode() and DataflowValue.hashCode()
- bug about size calculation for custom attributes
17 May 2005: ASM 2.0 (cvs-tag: ASM_2_0)
7 February 2005: ASM 2.0.RC1 (cvs-tag: ASM_2_0_RC1)
- Bug fixes
- New visitCode() method in MethodVisitor to easily detect first instruction
- signature support (contribution from Thomas Hallgren)
- commons package (contribution from CLIB and other projects; not yet stable)
- memory usage optimization in tree package (contribution from Rene Treffer)
- performance improvements in core package
- performance improvements in analysis package (dataflowinterpreter is now two times faster)
- asm library plugin for Eclipse, used by Bytecode Outline plugin
21 January 2005: ASM 1.5.3 (cvs-tag: ASM_1_5_3)
- Bug fixes
- New behavior for visitLineNumber
8 November 2004: ASM 2.0 alpha (cvs-tag: ASM_2_0_ALPHA)
- Major API changes for Java 5 attributes
- added new FieldVisitor interface
- added new AnnotationVisitor interface
- renamed CodeVisitor into MethodVisitor
- renamed Constants into Opcodes
- added and changed methods in ClassVisitor and CodeVisitor
- removed almost all classes in attrs package
- removed TreeClassAdapter and TreeCodeAdapter
- added new MemberNode, AnnotationNode and LabelNode classes
- many changes in asm.util package
- Added many new tests, reorganized tests classes and scripts
8 November 2004: ASM 1.5.2 (cvs-tag: ASM_1_5_2)
23 September 2004: ASM 1.5.1 (cvs-tag: ASM_1_5_1)
- Cleaned up ASMifierClassVisitor
- Removed AnnotationElementValue
- Added more tests for attributes and Java 5 annotations
- Added new annotations example
- Build package for Maven's ibiblio repository
- Bug fixes
30 August 2004: ASM 1.5 (cvs-tag: ASM_1_5)
- Added support for class version in ClassVisitor
- Changed behavior for unrecognized attributes
- Added new analyzer in tree.analysis package (contribution from Bing Ran)
- Improved build files
- Bug fixes
11 May 2004: ASM 1.4.3 (cvs-tag: ASM_1_4_3)
- Added tree.analysis package
- Added xml package, contributed by Eugene Kuleshov
- Bug fixes
1 March 2004: ASM 1.4.2 (cvs-tag: ASM_1_4_2)
- Improved build files to facilitate Linux packaging
- Bug fixes
12 December 2003: ASM 1.4.1 (cvs-tag: ASM_1_4_1)
- Added attrs package, contributed by Eugene Kuleshov
13 November 2003: ASM 1.4 (cvs-tag: ASM_1_4)
3 November 2003: ASM 1.3.6 (cvs-tag: ASM_1_3_6)
- Changed license from LGPL to BSD
8 October 2003: ASM 1.3.5 (cvs-tag: ASM_1_3_5)
- Bug fixes
- Added thread safety support in ClassReader
- Added equals and hashcode in Type
- Added FAQ
9 July 2003: ASM 1.3.4 (cvs-tag: ASM_1_3_4)
- Added kASM jar (needed a small refactoring)
3 October 2002: ASM 1.3.3 (cvs-tag: ASM_1_3_3)
- Added tree package
- Added support for GOTO_W and JSR_W
- Added an ant target to create a debian package
6 September 2002: ASM 1.3.2 (cvs-tag: ASM_1_3_2)
6 September 2002: ASM 1.3.1 (cvs-tag: ASM_1_3_1)
11 July 2002: ASM 1.3 (cvs-tag: ASM_1_3)
Origins
- The ASM project was created by Eric Bruneton in 2000, during his
PhD at INRIA. At that time it
was only a code generator (no ClassReader, no Visitor concept).
It was used to generate dynamic stub and proxy classes,
before the
java.lang.reflect.Proxy class was released
in JDK 1.3. These dynamic classes were used to transparently add
non functional properties (logging, persistence, replication, etc)
to user components.
- The visitor idea and the ClassReader concepts were added later,
in order to be able to transform existing classes. This was
needed to insert the non functional code directly in the user
classes, instead of in an intermediate proxy (for better performance).
These new features were designed and implemented by Eric Bruneton
after his PhD, at France Telecom R&D (now Orange Labs),
in order to implement the
Fractal component model.
- The ASM project was released in Open Source in 2002, at the same
time as the Fractal project. Since then, many external contributions
have been done to the project. The most important contributors are
now part of the ASM team, namely Eugene Kuleshov (since 2003),
Andrei Loskutov (since 2004) and Rémi Forax (since 2008).
|  |