- Added implementation for attachment on Linux and HotSpot using a non-JDK VM.
- Fixed argument resolution for
ByteBuddyAgent. - Fixed field resolution for
MethodCallto allow custom definition of fields. - Fixed visibility checks.
- Do not override default method for proxies for
Pipe.
- Fixed type discovery for custom advice annotation bindings.
- Added possibility to configure suppression handler in
Adviceclasses.
- Refactored
Adviceto use stack manipulations andAssigner. - Refactored
Adviceto useReturninstead ofBoxedReturnand addedAllArgumentsinstead ofBoxedArgumentsin conjunction with allowing to use dynamic typing for assignments via the annotation. - Added fixed value instrumentation for method parameters.
- Added weak class loader referencing for
Nexusand allow registration of aReferenceQueue.
- Extended
MethodCallAPI. - Added additional element matchers.
- Extended
AsmVisitorWrapperAPI.
- Refactored
Adviceto allow usage as a wrapper for anImplementation. This allows chaining of such advices. - Allow to dynamically locate a
FieldDescriptionorParameterDescriptionfrom a customAdviceannotation which binds the field or parameter value. - Added
invokeSelfoption toMethodCallinstrumentation.
- Refactored
FieldAccessorto allow more flexible creation of getters and setters of particular parameters. - Create string-based hashes for random fields that depend on a value's hash value.
- Fixed stack size computation when using
@Advice.Origin.
- Refactor
Instrumentations to only delegate to fields instead of requireing their definition. ThedefineFieldAPI should be generally preferred for defining fields as it is much richer and therefore easier to extend. - Made type annotation reader more robust towards older versions of Java 8.
- Refactored lazy type resolution for generic types to no longer eagerly load generic types when navigating through a type hierarchy.
- Unified several implementation APIs and added better abstractions.
- Fixed some missing bits of validation of implementations.
- Do not replicate incompatible bridge methods.
- Use
IMITATE_SUPER_CLASS_OPENINGas a default constructor strategy. - Extract method visibility during method graph compilation.
- Apply a type variable's erasure if a type variable is out of scope instead of throwing an exception. This can happen when subclassing an inner type outside of its outer type or when a compiler such as scalac adds inconsistent generic type information.
- Optimize the application of the ignore matcher within an agent builder to only be applied once.
- Added
ConstructorStrategyfor inheriting constructors but make thempublic. - Do not instrument anonymously loaded types during redefinition unless the lambda strategy is enabled.
- Reuse
CircularityLockon allAgentBuilders by default to avoid that Byte Buddy agents introduce circularities to different agents. - Also allow using
AdviceasImplementation. - Added
FixedValue.self()and addedFieldPersistencefor describingvolatilefields.
- Also acquire circularity lock during class file retransformation.
- Added slicing
BatchAllocator.
- Explicitly check for recursive transformation of types used during a transformation causing a
ClassCircularityErrorfrom anAgentBuilderby adding thread-local locking.
- Additional refactoring of the
AgentBuilderto fix a regression of 1.4.27. - Unified the error listener and the regular listener that were added in the previous version.
- Refactored
AgentBuilderretransformation mechanism to allow for custom recovery and batch strategies. - Fixed Gradle plugin build which did not contain files.
- Supply no argument to agent attachment by default instead of empty string argument.
Note: Currently, it seems like the new retransformation mechanism introduces a racing condition in class loading resulting in some classes not being instrumented
- Refactored
skipOnproperty ofAdvicecomponent. - Allow reading a
Method/Constructorproperty fromAdvice. - Fixed bug that duplicated added parameter annotations on a
DynamicTypebuilder.
- Added overloaded versions for
byte-buddy-agentto allow agent attachment with explicit argument. - Made
Advicemore flexible to allow skipping of instrumented method for complex advice method return types.
- Make
AgentBuilderproduceResettableClassFileTransformers which can undo their transformation.
- Made
TypeDescription.ForLoadedTypeserializable for better alignment with reflection API. - Adapted changes in
InstrumentationAPI for Java 9. - Refactored
AnnotationValueto apply Java 9 specific string rendering on Java 9 VMs. - Adapted new
toStringrepresentation of parameterized types on Java 9 VMs.
- Added Byte Buddy plugin for Gradle.
- Improved Byte Buddy plugin for Maven.
- Fixed modifier resolution for anonymous classes to preserve a shadowed
finalmodifier. - Added Byte Buddy plugin for Maven.
- Fixed stack size adjustment for accessing double-sized primitive access array elements.
- Fixed
Adviceadjustment of local variable index for debugging information (improves Java agent compatibility). - Renamed
TypeLocatortoPoolStrategyto avoid confusion with the names. - Removed
DescriptionStrategys that rely on fallback-description as those do not properly fallback for meta data. - Added
FallbackStrategyas a replacement which allows to reattempt a transformation without using loaded type information.
- Added
@StubValueand@Unusedannotations toAdvicecomponent. - Added possibility to retain line number information for entry
Advice - Removed class loader dependency when querying loaded annotation values.
- Made annotation values more type-safe.
- Added automatic support for Java 9 class file location for boot modules.
- Improvided
FieldProxy.Binderto allow for a single accessor interface. - Fixed counting problem in
Advicecomponent.
- Fixed annotation resolution for Java 9 to exlude the
jdk.internalnamespace by default. - Do not copy annotations for default constructor strategies but allow configuring annotation strategy.
- Added file-system class file locators for modules in Java 9.
- Added convenience methods to default location strategies.
- Exclude
sun.reflectnamespace by default fromAgentBuilderto avoid error messages. - Fixed resolution of type varibales for transformed methods and fields.
- Fixed stack-aware method visitor when encountering exchanging duplication instructions.
- Added
POOL_LAST_DEFERREDandPOOL_LAST_FALLBACKdescription strategy. - Fixed resolution of bridge methods for diamond inheritance.
- Refactored modifier API to only expose named modifier checks for an element that apply to it.
- Fixed resolution for type variables for transformed methods.
- Fixed frame generation for
voidmethods without regular return inAdvice. - Fixed
TypeValidationfor Java 8 interfaces not allowing private methods. - Simplified and documented
AccessControllerusage.
- Fixed bug with handling of legacy byte code instructions in
Advicecomponent. - Cleaned up and refactored usage of
AccessController. Added privileged handling toAgentBuilder. - Added proper buffering to non-buffered interaction with file streams.
- Make
ByteBuddycreation more robust by adding a default fallback for unknown VMs. - Improved support for Java 9.
- Lazily compute
Implementation.TargetandImplementation.Contextin case of a type inlining to provide correct feature set. Added validation if this constraint is broken. - Make
TypePoolusing an eagerTypeDescriptionmore robust towards errors.
- Monitor advice code for inconsistent stack heights at return statements to clean the stack during instrumentation to not trigger verifier errors if such atypical but legal code is encountered.
- Do not generate handlers for return values if an instrumented method or an advice method only throws exceptions but never returns regularly.
- Added tracer for the state of the operand stack for the
Advicecomponent to clear the stack upon a return. Without this, if code would return without leaving the stack empty, a verifier error would be thrown. This typically is only a problem when processing code that was produced by other code generation libraries.
- Fixed resolution of modifiers and local type properties from a default type pool.
- Improved key for caching
TypeLocatorto share a key for the system and bootstrap class loader.
- Added additional implementations of a
DescriptionStrategyforPOOL_LASTandPOOL_FIRSTresolution.
- Allow to skip execution of instrumented method from
Advicevia entry advice indicated by return value. - Added API to transform predefined type variables on a dynamic type.
- Refactored
TransformerAPI to be shared for methods, fields and type variables. - Allow to spread
Advicemethods over multiple classes. - Added convenience methods to
AsmVisitorWrappers for declared fields and methods. - Performance improvements in
Adviceclass for byte code parsing.
- Added default
TypePoolthat allows for lazy resolution of referenced types. This can both be a performance improvement and allows working with optional types as long as they are not directly required within a transformation. This type pool is now used by default. - Make interfaces public by default when creating them via
ByteBuddy::makeInterface. - Added
TypeResolutionStrategyto allow for active resolution via theNexusalso from outside theAgentBuilder. - Make best effort from a
ClassLoadingStrategyto not resolve types during loading. - Added convenience method for loading a dynamic type with an implicit
ClassLoadingStrategy.
- Added a
ClassFileLocatorfor a class loader that only references it weakly. - Allow to supply
TypePoolandClassFileLocatorseperatly within anAgentBuilder. - Made
MethodPoolsensitive to bridge methods which should only be added to classes of a version older than Java 4. - Fixed creation of Java 9 aware
ClassFileTransformerto only apply on Java 9 VMs. - Added matcher for the type of a class loader.
- Fixed name resolution of anonymously-loaded types.
- Added
InstallationStrategytoAgentBuilderthat allows customization of error handling. - Added chunked redefinition and retransformation strategies.
- Added
net.bytebuddyqualifier when logging. - Added
net.bytebuddy.dumpsystem property for specifing a location for writing all created class files.
- Fixed bug in
MultipleParentClassLoaderwhere class loaders were no longer filtered properly. - Added support for major.minor version 53 (Java 9).
- Made
DescriptionStrategycustomizable.
- Changed storage order of return values in
Advicemethods to avoid polluting the local variable array when dealing with nested exception handlers. - Added caching
ElementMatcheras a wrapping matcher. - Exclude Byte Buddy types by default from an
AgentBuilder. - Added
DescriptionStrategythat allows not using reflection in case that a class references non-available classes.
- Fixed validation by
MethodCallinstrumentation for number of arguments provided to a method. - Added further support for module system.
- Allow automatic adding of read-edges to specified classes/modules when instrumenting module classes.
- Implicitly skip methods without byte code from advice component.
- Added initial support for Jigsaw modules.
- Adjusted agent builder API to expose modules of instrumented classes.
- Added additional matchers.
- Simplified
BinaryLocatorand changed its name toTypeLocator.
- Fixed
MultipleParentClassLoaderto support usage as being a parent itself. - Fixed default ignore matcher for
AgentBuilderto ignore synthetic types.
- Added convenience method to
MethodCallto add all arguments of the instrumented method. - Added
optionalattribute toAdvice.This.
- The Owner type of a parameterized type created by a
TypePoolis no longer parameterized for a static inner type. - The receiver type of a executingTransformer is no longer considered parameterized for a static inner type.
- Removed overvalidation of default values for non-static fields.
- Better support for Java 1 to Java 4 by automatically resolving type references from a type pool to
forNamelookups. - Better support for dealing with package-private types by doing the same for invisible types.
- Simplified
MethodHandleandMethodTypehandling asJavaInstance.
- Extended the
AgentBuilderto allow for transformations that apply fall-through semantics, i.e. work as a decorator. - Added map-based
BinaryLocator.
- Only add frames in
Advicecomponents if class file version is above 1.5. - Allow to specify exception type for exit advice to be named. This implies a default change where exit advice is no longer invoked by default when an exception is thrown from the instrumented method.
- Added possibility to assign a value to a
@BoxedReturnvalue to change the returned value.
- Extended the
Advicecomponent storing serializable values that cannot be represented in the constant pool as encodings in the constant pool. - Added support for non-inlined
Advicemethod. - Mask modifiers of ASM to not longer leak internal flags beyond the second byte.
- Added support for suppressing an exception of the instrumented method from within exit advice.
- Fixed error during computation of frames for the
Advicecomputation. - Avoid reusing labels during the computations of exception tables of the
Advicecomponent.
- Byte Buddy
Advicenow appends handlers to an existing exception handler instead of prepending them. Before, existing exception handlers were shadowed when applying suppression or exit advice on an exception. - Added additional annotations for
Advicesuch as@Advice.BoxedReturnand@Advice.BoxedArgumentsfor more generic advice. Added possibility to write to fields from advice. - Added mechanism for adding custom annotations to
Advicethat map compile-time constants. - Implemented a canonical binder for adding custom compile-time constants to a
MethodDelegationmapping.
- Fixed another bug during frame translation of the
Advicecomponent when suppression were not catched for an exit advice. - Improved unit tests to automatically build Byte Buddy with Java 7 and Java 8 byte code targets in integration.
- Optimized method size for
Advicewhen exception is not catched. - Improved convenience method
disableClassFormatChangesforAgentBuilder.
- Fixed frame computation for the
Advice. - Optimized frame computation to emitt frames of the minimal, possible size when using
Advice. - Only add exit
Adviceonce to reduce amound of added bytes to avoid size explosion when a method supplied several exits. - Optimized
Adviceinjection to only add advice infrastucture if entry/exit advice is supplied. - Optimized exception handling infrastructure for exit
Adviceto only be applied when exceptions are catched. - Added mapping for the IINC instruction which was missing from before.
- Added possibility to propagate AMS reader and writer flags for
AsmVisitorWrapper. - Made
Advicemethod parser respect ASM reader flags for expanding frames.
- Fixed bug when returning from an
Adviceexit method without return value and accessing@Advice.Thrown. - Added additional annotations for advice
@Advice.Ignoredand@Advice.Origin. - Implemented frame translator for
Advicemethod to reuse existing frame information instead of recomputing it.
- Implemented universal
FieldLocator. - Extended
AgentBuilderAPI to allow for more flexible matching and ignoring types.
- Added
Advice.FieldValueannotation for reading fields from advice.
- Added support for new Java 9 version scheme.
- Added hierarchical notation to default
TypePool.
- Added possibility to suppress
Throwablefrom advice methods when using theAdviceinstrumentation.
- Added possibility to use contravariant parameters within the
Adviceadapter for ASM.
- Added
Adviceadapter for ASM. - Fixed
AsmVisitorWrapperregistration to be stacked instead of replacing a previous value. - Added validation for setting field default values what can only be done for
staticfields. Clarified javadoc. - Fixed attach functionality to work properly on IBM's J9.
- Fixed return type resolution for overloaded bridge method.
- Fixed redefinition strategy for
AgentBuilderwhere transformations were applied twice. - Added
ClassLoaderas a third argument for theAgentBuilder.Transformer.
- Added validation for receiver types.
- Set receiver types to be implicit when extracting constructors of a super type.
- Added support for receiver type retention during type redefinition and rebasement.
- Added support for receiver type definitions.
- Fixed interface assertion of the custom binder types to accept default methods.
- Improved documentation.
- Refactored
AgentBuilderAPI to be more streamlined with the general API and improved documentation. - Added possibility to instrument classes that implement lambda expressions.
- Added possibility to explicitly ignore types from an
AgentBuilder. By default, synthetic types are ignored. - Proper treatment of deprecation which is now written into the class file as part of the resolved modifier and filtered on reading.
- Added support for Java 9 APIs for process id retrieval.
- Added support for Java 9 owner type annotations.
- Fixed bug in type builder validation that prohibited annotations on owner types for non-generic types.
- Added additional element matchers for matching an index parameter type.
- Fixed resolution of type paths for inner classes.
- Added preliminary support for receiver types.
- Fixed resolution of type variables from a static context.
- Refactored type variable bindings for generic super types: Always retain variables that are defined by methods.
- Retain type annotations that are defined on a
TargetType.
- Added support for type annotations.
- Refactored public API to support type annotations and parameter meta information.
- Several renamings in preparation of the 1.0.0 release.
- Refactored type representation to represent raw types as
TypeDescriptions. This allows for resolution of variables on these types as erasures rather than their unresolved form. Refactored naming of generic types to the common naming scheme with nested classes. - Replaced generalized token representation to define tokens, type tokens and signature tokens.
- General API improvements and minor bug fixes.
- Implemented all type lists of class file-rooted files to fallback to type erasures in case that the length of generic types and raw types does not match. This makes Byte Buddy more robust when dealing with illegally defined class files.
- Fixed rule on a default method's invokeability.
- Extended
MethodCallimplementation to include shortcuts for executingRunnableandCallableinstances. - Added
failSafematcher that returnsfalsefor types that throw exceptions during navigation.
- Fixed type resolution for anonymously loaded classes by the
ClassReloadingStrategy. - Added additional
InitiailizationStrategys for self-injection where the new default strategy loads types that are independent of the instrumented type before completing the instrumentation. This way, the resolution does not fail for types that are accessed via reflection before initializing the types if a executingTransformer is rebased.
- Fixed resolution of
@Originfor constructors and added possibility to use theExecutabletype. - Fixed name resolution of types loaded by anonymous class loading.
- Allowed alternative lookup for redefinitions to support types loaded by anonymous class loading.
- Fixed generic type resolution optimization for proxies for
@Super.
- Added
TypePoolthat returns precomputedTypeDescriptions for given types. - Fixed agent and nexus attachment and the corresponding value access.
- Added visibility substitution for
@Superwhen the instrumented type is instrumented to see changed state on a redefinition. - Added patch for modifier information of inner classes on a redefinition.
- Added fallback for
Nexusinjection to attempt lookup of already loaded class if resource cannot be located.
- Added
TypePoolthat falls back to class loading if a class cannot be located. - Added binary locator for agent builder that uses the above class pool and only parses the class file of the instrumented type.
- Added methods for reading inner classes of a
TypeDescription. - Fixed random naming based on random numbers to avoid signed numbers.
- Moved
NexusandInstallertypes to a package-level to avoid illegal outer and inner class references which could be resolved eagerly. - Added validation for illegal constant pool entries.
- Added a
Prematureinitialization strategy for optimistically loading auxiliary types. - Added a
ClassVisitorWrapperfor translating Java class files prior to Java 5 to use explicit class loading rather than class pool constants.
- Fixed injection order for types to avoid premature loading by dependent auxiliary types.
- Added additional
ClassFileLocators and refactored class file lookup to always use these locators.
- Refactored injection strategy to always inject and load the instrumented type first to avoid premature loading by reference from auxiliary types.
- Refactored
AgentBuilder.Defaultto delay auxiliary type injection until load time to avoid premature loading by reference from auxiliary types. - Added API to add additional code to type initializers while building a type.
- Refactored agent
Nexusto allow for multiple registrations of self initializers if multiple agents are registered via Byte Buddy. - Fixed resolution of interface methods that were represented in the type hierarchy multiple times.
- Implemented custom ASM class writer to allow for frame computation via Byte Buddy's type pool when this is required by a user.
- Fallback to no allowing for instrumenting type initializers for rebased or redefined interfaces before Java 8.
- Refactored
AgentBuilder.Defaultto delegate exceptions during redefinitions to listener instead of throwing them. - Fixed bug where instrumented type would count to auxiliary types and trigger injection strategy.
- Fixed bug where interface types would resolve to a non-generic type signature.
- Added strategy to use redefinition or retransformation of the
InstrumentationAPI when building agents. - Added lazy facade to be used by agent builder to improve performance for name-based matchers.
- Fixed parser to suppress exceptions from generic signatures which are not supposed to be included in the class file if no array type is generic.
- Fixed class validator which did not allow
<clinit>blocks in interface types. - Added restriction to retransformation to not attempt a retransformation at all if no class should be retransformed.
- Added a factory for creating an
Implementation.Contextthat is configurable. This way, it is possible to avoid a rebase of a type initializer which is not always possible. - Added a possibility to specify for an
AgentBuilderhow it should redefine or rebase a class that is intercepted.
- Fixed naming strategy for fields that cache values which chose duplicate names.
- Fixed resolution of raw types within the type hierarchy which were represented as non-generic
TypeDescriptioninstances where type variables of members were not resolved. - Added possibility to specify hints for
ClassReaderandClassWriterinstances. - Fixed resolution for modifiers of members that are defined by Byte Buddy. Previously, Byte Buddy would sometimes attempt to define private synthetic methods on generated interfaces.
- Fixed assignability resolution for arrays.
- Fixed class file parser which would not recognize outer classes for version 1.3 byte code.
- Read
Nexusinstances of the Byte Buddy agents from the enclosing class loader rather than from the system class loader. This allows for their usage from OSGi environments and for user with other custom class loaders. - Changed modifiers for accessor methods and rebased methods to be public when rebasing or accessing methods of a Java 8 interface. For interfaces, all modifiers must be public, even for such synthetic members.
- Support absolute path names for accessing class file resources of the
ByteArrayClassLoader. - Added random suffix to the names of rebased methods to avoid naming conflicts.
- Refactored runtime attachment of Java agents to support Java 9 and additional legacy VM (version 8-).
- Refactored
MethodGraphto only represent virtual methods. - Changed notion of visibility to not longer consider the declaring type as part of the visibility.
- Increased flexibility of defining proxy types for
@Superand@Defaultannotations. - Added directional
AmbigouityResolver. - Fixed detection of methods that can be rebased to not include methods that did not previously exist.
- Added support for generic types.
- Replaced
MethodLookupEnginewithMethodGraph.Compilerto provide a richer data structure. - Added support for bridge methods (type and visibility bridges).
- Refactored the predefined
ElementMatchers to allow for matching generic types. - Replaced the
ModifierResolverwith a more generalMethodTransformer.
- Added support for discovery and handling of Java 9 VMs.
- Fixed class loading for Android 5 (Lollipop) API.
- Fixed resolution of ignored methods. Previously, additional ignored methods were not appended but added as an additional criteria for ignoring a method.
- Fixed resolution of field accessors to not attempt reading of non-static fields from static methods.
- Fixed renaming strategy for type redefinitions to work around a constraint of ASM where stack map frames required to be expanded even though this was not strictly necessary.
- Added API for altering a method's modifiers when intercepting it.
- Added API for allowing to filter default values when writing annotations.
- Added additional
ClassFileLocators for locating jar files in folders and jar files. - Added explicit check for invalid access of instance fields from static methods in field accessing interceptors.
- Added the
@StubValueand@FieldValueannotations.
- Corrected the resolution of a type's visibility to another type to determine if a method can be legally overridden.
- Previous version 0.6.9 contained another bug when attempting to fix this problem.
Corrected incorrect deployment of version 0.6.7 which does not use a dependency reduced POM for the byte-buddy module.
- Upgraded ASM dependency to 5.0.4.
- Fixed OSGi headers in all relevant artifacts.
Warning: The byte-buddy artifact of version 0.6.7 is accidentally deployed with a defect POM file which does not exclude the shaded resources.
- Fixed error in resolution of the
TargetTypepseudo-variable when used as component type of an array.
- Extended public API with convenience methods.
- Extended public API to accept more general argument types when appropriate.
- Extended
@Originannotation to allow for accepting modifiers.
- Made the
TypeDescription.ForLoadedTypeclass loader agnostic. Before, a class that was loaded by multiple class loaders would have been considered inequal what is not true for the byte code level.
- Added additional class validation such that it becomes impossible to define members on classes that do not fit the class's structure, i.e. default methods on Java interfaces in version seven.
- Added default
Assignersingleton.
- Added
AnnotationDescription.Builderto allow easy definition of annotation values without loading any values. - Added possibility to define enumerations at runtime.
- Added possibility to dynamically read enumerations for the
MethodCallandInvokeDynamicimplementations. - Further API clean-up.
- Renamed the
Instrumentationinterface toImplementationto avoid naming conflicts with Java types. - Renamed the
Fieldannotation toFieldProxyto avoid naming conflicts with Java types. - Refactored package structure to make the implementation more readable.
- Added possibility to define annotation default values.
- Avoid creation of an auxiliary placeholder type for method rebasements if it is not required.
- Avoid rebasing of methods if they are not instrumented.
- Reimplemented
TypeWriter,MethodRegistryand other supporting infrastructure to make the code simpler. - Refactored testing that is related to the previous infrastructure.
- Added possibility to write parameter meta information to created classes if it is fully available for a method.
- Retrofitted method parameters to be represented by
ParameterDescriptions and added possibility to extract names and modifiers for these parameters, either by using the Java 8 API (if available) or by reading this information from the underlying class file. - Fixed a
NullPointerExceptionbeing thrown due to accidental return of anullvalue from a method.
- Fixed missing retention of method annotations of instrumented types.
- Allowed dynamic lookup of methods for the
MethodCallinstrumentation.
- Changed the
SuperMethodCallinstrumentation to fall back to a default method call if required. A different behavior was found to surprise users and would introduce subtle bugs in user code as the super method instrumentation would always work with subclassing due to Java super method call semantics. - Added a
MethodCallinstrumentation that allows hard-coding a method call. - Added an
InvokeDynamicinstrumentation that allows runtime dispatching by bootstrap methods. - Fixed the default
TypePoolto retain generic signatures in order to avoid that agents delete such signatures. - Fixed a bug in all of the the default
ConstructorStrategythat effectively prevented intercepting of constructors.
- Fixed a bug where interface generation would result in a
NullPointerException. - Added additional
ElementMatchers that allow to identify class loaders.
Added the andThen method to the SuperMethodCall instrumentation in order to allow for a more convenient
executingTransformer interception where a hard-coded super method call is required by the Java verifier.
- Added the
DeclaringTypeResolveras a component in the default chain which selects the most specific method out of two. This is mainly meant to avoid the accidental matching of the methods that are declared by theObjecttype. - Added
TypeInitializers in order to allowInstrumentations to define type initializer blocks. - Replaced the
MethodMatcherAPI with theElementMatcherAPI which allows for a more sophisticated matching DSL. - Added a
ClassLoadingStrategyfor Android in its own module. - Introduced an
AgentBuilderAPI and implementation.
- Refactored the implementation of the
VoidAwareAssignerwhich would otherwise cause unexpected behavior in its default state. - Added a missing boxing instruction to the
InvocationHandlerAdapter.
- Extended
Instrumentation.Contextto support field accessors. - Added the
TypePoolabstraction and added a default implementation. - Refactored annotations to have an intermediate form as
AnnotationDescriptionwhich does not need to represent loaded values. - Refactored several built-in
Instrumentation, among others, all implementations now supportTypeDescriptionin addition to loadedClassas their arguments - Added several annotations that apply to the
MethodDelegation.
- Added support for optionally specifying a
ProtectionDomainfor the built-inClassLoadingStrategyimplementations. - Fixed a bug in the resolution of resources of the
ByteArrayClassLoaderand its child-first implementation.
- Added basic support for Java 7 types
MethodHandleandMethodTypewhich are available from Java 7 for injection. - Added support for type redefinition and type rebasing.
- Added support for accessing a JVM's HotSwap features and a Java agent.
- Added latent a child-first
ClassLoadingStrategyand manifest versions of theWRAPPERandCHILD_FIRSTdefault class loading strategies.
- Added proper support for defining class initializers. Added support for field caching from method instrumentations,
mainly for allowing the reuse of
Methodinstances for the@Originannotation and theInvocationHandlerAdapter.
- Changed the semantics of the
@SuperCallto be only bindable, if a super method can be invoked. Before, an exception was thrown if only a non-existent or abstract super method was found. - Added features for the interaction with Java 8 default methods. Refactored method lookup to extract invokable default methods.
- Refactored the invocation of super methods to be created by an
Instrumentation.Target. For a future release, this hopefully allows for class redefinitions using today's API for creating subclasses. - Upgraded to ASM 5.0.3.
- First general release.