Class MethodInvocation.Invocation
- java.lang.Object
-
- net.bytebuddy.implementation.bytecode.member.MethodInvocation.Invocation
-
- All Implemented Interfaces:
MethodInvocation.WithImplicitInvocationTargetType,StackManipulation
- Enclosing class:
- MethodInvocation
@Enhance(includeSyntheticFields=true) protected class MethodInvocation.Invocation extends java.lang.Object implements MethodInvocation.WithImplicitInvocationTargetType
An implementation of a method invoking stack manipulation.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface net.bytebuddy.implementation.bytecode.StackManipulation
StackManipulation.Compound, StackManipulation.Illegal, StackManipulation.Size, StackManipulation.Trivial
-
-
Field Summary
Fields Modifier and Type Field Description private MethodDescription.InDefinedShapemethodDescriptionThe type on which this method is to be invoked.private TypeDescriptiontypeDescriptionThe method to be invoked.
-
Constructor Summary
Constructors Modifier Constructor Description protectedInvocation(MethodDescription.InDefinedShape methodDescription)Creates an invocation of a given method on its declaring type as an invocation target.protectedInvocation(MethodDescription.InDefinedShape methodDescription, TypeDescription typeDescription)Creates an invocation of a given method on a given invocation target type.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description StackManipulation.Sizeapply(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext)Applies the stack manipulation that is described by this instance.StackManipulationdynamic(java.lang.String methodName, TypeDescription returnType, java.util.List<? extends TypeDescription> methodType, java.util.List<?> arguments)Invokes the method as a bootstrap method to bind a call site with the given properties.booleanisValid()Determines if this stack manipulation is valid.StackManipulationonHandle(MethodInvocation.HandleType type)Invokes the method via aMethodHandle.StackManipulationspecial(TypeDescription invocationTarget)Transforms this method invocation into a special invocation on the given type.StackManipulationvirtual(TypeDescription invocationTarget)Transforms this method invocation into a virtual (or interface) method invocation on the given type.
-
-
-
Field Detail
-
typeDescription
private final TypeDescription typeDescription
The method to be invoked.
-
methodDescription
private final MethodDescription.InDefinedShape methodDescription
The type on which this method is to be invoked.
-
-
Constructor Detail
-
Invocation
protected Invocation(MethodDescription.InDefinedShape methodDescription)
Creates an invocation of a given method on its declaring type as an invocation target.- Parameters:
methodDescription- The method to be invoked.
-
Invocation
protected Invocation(MethodDescription.InDefinedShape methodDescription, TypeDescription typeDescription)
Creates an invocation of a given method on a given invocation target type.- Parameters:
methodDescription- The method to be invoked.typeDescription- The type on which this method is to be invoked.
-
-
Method Detail
-
isValid
public boolean isValid()
Determines if this stack manipulation is valid.- Specified by:
isValidin interfaceStackManipulation- Returns:
- If
false, this manipulation cannot be applied and should throw an exception.
-
apply
public StackManipulation.Size apply(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext)
Applies the stack manipulation that is described by this instance.- Specified by:
applyin interfaceStackManipulation- Parameters:
methodVisitor- The method visitor used to write the method implementation to.implementationContext- The context of the current implementation.- Returns:
- The changes to the size of the operand stack that are implied by this stack manipulation.
-
virtual
public StackManipulation virtual(TypeDescription invocationTarget)
Transforms this method invocation into a virtual (or interface) method invocation on the given type.- Specified by:
virtualin interfaceMethodInvocation.WithImplicitInvocationTargetType- Parameters:
invocationTarget- The type on which the method is to be invoked virtually on.- Returns:
- A stack manipulation representing this method invocation.
-
special
public StackManipulation special(TypeDescription invocationTarget)
Transforms this method invocation into a special invocation on the given type.- Specified by:
specialin interfaceMethodInvocation.WithImplicitInvocationTargetType- Parameters:
invocationTarget- The type on which the method is to be invoked specially on.- Returns:
- A stack manipulation representing this method invocation.
-
dynamic
public StackManipulation dynamic(java.lang.String methodName, TypeDescription returnType, java.util.List<? extends TypeDescription> methodType, java.util.List<?> arguments)
Invokes the method as a bootstrap method to bind a call site with the given properties. Note that the Java virtual machine currently only knows how to resolve bootstrap methods that link static methods or a constructor.- Specified by:
dynamicin interfaceMethodInvocation.WithImplicitInvocationTargetType- Parameters:
methodName- The name of the method to be bound.returnType- The return type of the method to be bound.methodType- The parameter types of the method to be bound.arguments- The arguments to be passed to the bootstrap method.- Returns:
- A stack manipulation that represents the dynamic method invocation.
-
onHandle
public StackManipulation onHandle(MethodInvocation.HandleType type)
Invokes the method via aMethodHandle.- Specified by:
onHandlein interfaceMethodInvocation.WithImplicitInvocationTargetType- Parameters:
type- The type of invocation.- Returns:
- A stack manipulation that represents a method call of the specified method via a method handle.
-
-