Package net.bytebuddy.asm
Class MemberSubstitution
java.lang.Object
net.bytebuddy.asm.MemberSubstitution
- All Implemented Interfaces:
AsmVisitorWrapper.ForDeclaredMethods.MethodVisitorWrapper
@Enhance
public class MemberSubstitution
extends Object
implements AsmVisitorWrapper.ForDeclaredMethods.MethodVisitorWrapper
Substitutes field access or method invocations within a method's body.
Important: This component relies on using a TypePool
for locating types within method bodies. Within a redefinition
or a rebasement, this type pool normally resolved correctly by Byte Buddy. When subclassing a type, the type pool must be set
explicitly, using DynamicType.Builder.make(TypePool)
or any similar method. It is however not normally
necessary to use this component when subclassing a type where methods are only defined explicitly.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static interface
A replacement combines aMemberSubstitution.Substitution
and a way of choosing if this substitution should be applied for a discovered member.protected static class
A method visitor that applies a substitution for matched methods.static interface
A substitution replaces or enhances an interaction with a field or method within an instrumented method.static interface
A type pool resolver is responsible for resolving aTypePool
for locating substituted members.static class
A member substitution that lacks a specification for how to substitute the matched members references within a method body. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final MethodGraph.Compiler
The method graph compiler to use.private final MemberSubstitution.Replacement.Factory
The replacement factory to use.private final boolean
true
if the method processing should be strict where an exception is raised if a member cannot be found.private final MemberSubstitution.TypePoolResolver
The type pool resolver to use. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
MemberSubstitution
(boolean strict) Creates a default member substitution.protected
MemberSubstitution
(MethodGraph.Compiler methodGraphCompiler, MemberSubstitution.TypePoolResolver typePoolResolver, boolean strict, MemberSubstitution.Replacement.Factory replacementFactory) Creates a new member substitution. -
Method Summary
Modifier and TypeMethodDescriptionconstructor
(ElementMatcher<? super MethodDescription> matcher) Substitutes any constructor invocation that matches the given matcher.element
(ElementMatcher<? super ByteCodeElement> matcher) Substitutes any interaction with a field or method that matches the given matcher.field
(ElementMatcher<? super FieldDescription.InDefinedShape> matcher) Substitutes any field access that matches the given matcher.invokable
(ElementMatcher<? super MethodDescription> matcher) Substitutes any method or constructor invocation that matches the given matcher.method
(ElementMatcher<? super MethodDescription> matcher) Substitutes any method invocation that matches the given matcher.on
(ElementMatcher<? super MethodDescription> matcher) Applies this member substitution to any method that matches the supplied matcher.static MemberSubstitution
relaxed()
Creates a member substitution that skips any unresolvable fields or methods that are referenced within a method body.static MemberSubstitution
strict()
Creates a member substitution that requires the resolution of all fields and methods that are referenced within a method body.with
(MemberSubstitution.TypePoolResolver typePoolResolver) Specifies a type pool resolver to be used for locating members.with
(MethodGraph.Compiler methodGraphCompiler) Specifies the use of a specific method graph compiler for the resolution of virtual methods.org.objectweb.asm.MethodVisitor
wrap
(TypeDescription instrumentedType, MethodDescription instrumentedMethod, org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, TypePool typePool, int writerFlags, int readerFlags) Wraps a method visitor.
-
Field Details
-
methodGraphCompiler
The method graph compiler to use. -
strict
private final boolean stricttrue
if the method processing should be strict where an exception is raised if a member cannot be found. -
typePoolResolver
The type pool resolver to use. -
replacementFactory
The replacement factory to use.
-
-
Constructor Details
-
MemberSubstitution
protected MemberSubstitution(boolean strict) Creates a default member substitution.- Parameters:
strict
-true
if the method processing should be strict where an exception is raised if a member cannot be found.
-
MemberSubstitution
protected MemberSubstitution(MethodGraph.Compiler methodGraphCompiler, MemberSubstitution.TypePoolResolver typePoolResolver, boolean strict, MemberSubstitution.Replacement.Factory replacementFactory) Creates a new member substitution.- Parameters:
methodGraphCompiler
- The method graph compiler to use.typePoolResolver
- The type pool resolver to use.strict
-true
if the method processing should be strict where an exception is raised if a member cannot be found.replacementFactory
- The replacement factory to use.
-
-
Method Details
-
strict
Creates a member substitution that requires the resolution of all fields and methods that are referenced within a method body. Doing so, this component raises an exception if any member cannot be resolved what makes this component unusable when facing optional types.- Returns:
- A strict member substitution.
-
relaxed
Creates a member substitution that skips any unresolvable fields or methods that are referenced within a method body. Using a relaxed member substitution, methods containing optional types are supported. In the process, it is however possible that misconfigurations of this component remain undiscovered.- Returns:
- A relaxed member substitution.
-
element
public MemberSubstitution.WithoutSpecification element(ElementMatcher<? super ByteCodeElement> matcher) Substitutes any interaction with a field or method that matches the given matcher.- Parameters:
matcher
- The matcher to determine what access to byte code elements to substitute.- Returns:
- A specification that allows to determine how to substitute any interaction with byte code elements that match the supplied matcher.
-
field
public MemberSubstitution.WithoutSpecification.ForMatchedField field(ElementMatcher<? super FieldDescription.InDefinedShape> matcher) Substitutes any field access that matches the given matcher.- Parameters:
matcher
- The matcher to determine what fields to substitute.- Returns:
- A specification that allows to determine how to substitute any field access that match the supplied matcher.
-
method
public MemberSubstitution.WithoutSpecification.ForMatchedMethod method(ElementMatcher<? super MethodDescription> matcher) Substitutes any method invocation that matches the given matcher.- Parameters:
matcher
- The matcher to determine what methods to substitute.- Returns:
- A specification that allows to determine how to substitute any method invocations that match the supplied matcher.
-
constructor
public MemberSubstitution.WithoutSpecification constructor(ElementMatcher<? super MethodDescription> matcher) Substitutes any constructor invocation that matches the given matcher.- Parameters:
matcher
- The matcher to determine what constructors to substitute.- Returns:
- A specification that allows to determine how to substitute any constructor invocations that match the supplied matcher.
-
invokable
public MemberSubstitution.WithoutSpecification invokable(ElementMatcher<? super MethodDescription> matcher) Substitutes any method or constructor invocation that matches the given matcher.- Parameters:
matcher
- The matcher to determine what method or constructors to substitute.- Returns:
- A specification that allows to determine how to substitute any constructor invocations that match the supplied matcher.
-
with
Specifies the use of a specific method graph compiler for the resolution of virtual methods.- Parameters:
methodGraphCompiler
- The method graph compiler to use.- Returns:
- A new member substitution that is equal to this but uses the specified method graph compiler.
-
with
Specifies a type pool resolver to be used for locating members.- Parameters:
typePoolResolver
- The type pool resolver to use.- Returns:
- A new instance of this member substitution that uses the supplied type pool resolver.
-
on
Applies this member substitution to any method that matches the supplied matcher.- Parameters:
matcher
- The matcher to determine this substitutions application.- Returns:
- An ASM visitor wrapper that applies all specified substitutions for any matched method.
-
wrap
public org.objectweb.asm.MethodVisitor wrap(TypeDescription instrumentedType, MethodDescription instrumentedMethod, org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, TypePool typePool, int writerFlags, int readerFlags) Wraps a method visitor.- Specified by:
wrap
in interfaceAsmVisitorWrapper.ForDeclaredMethods.MethodVisitorWrapper
- Parameters:
instrumentedType
- The instrumented type.instrumentedMethod
- The method that is currently being defined.methodVisitor
- The original field visitor that defines the given method.implementationContext
- The implementation context to use.typePool
- The type pool to use.writerFlags
- The ASMClassWriter
reader flags to consider.readerFlags
- The ASMClassReader
reader flags to consider.- Returns:
- The wrapped method visitor.
-