Class FixedValue
- java.lang.Object
-
- net.bytebuddy.implementation.FixedValue
-
- All Implemented Interfaces:
InstrumentedType.Prepareable
,Implementation
- Direct Known Subclasses:
FixedValue.ForArgument
,FixedValue.ForOriginType
,FixedValue.ForPoolValue
,FixedValue.ForThisValue
,FixedValue.ForValue
@Enhance public abstract class FixedValue extends java.lang.Object implements Implementation
This implementation returns a fixed value for a method. Other than theStubMethod
implementation, this implementation allows to determine a specific value which must be assignable to the returning value of any instrumented method. Otherwise, an exception will be thrown.- See Also:
FieldAccessor
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
FixedValue.AssignerConfigurable
Represents a fixed value implementation that is using a default assigner for attempting to assign the fixed value to the return type of the instrumented method.protected static class
FixedValue.ForArgument
A fixed value implementation that returns a method's argument.protected static class
FixedValue.ForNullValue
A fixed value ofnull
.protected static class
FixedValue.ForOriginType
A fixed value that appends the origin type of the instrumented type.protected static class
FixedValue.ForPoolValue
A fixed value implementation that represents its fixed value as a value that is written to the instrumented class's constant pool.protected static class
FixedValue.ForThisValue
A fixed value ofthis
.protected static class
FixedValue.ForValue
A fixed value implementation that represents its fixed value as a static field of the instrumented class.-
Nested classes/interfaces inherited from interface net.bytebuddy.implementation.Implementation
Implementation.Composable, Implementation.Compound, Implementation.Context, Implementation.Simple, Implementation.SpecialMethodInvocation, Implementation.Target
-
-
Field Summary
Fields Modifier and Type Field Description protected Assigner
assigner
The assigner that is used for assigning the fixed value to a method's return type.protected Assigner.Typing
typing
Indicates if dynamic type castings should be attempted for incompatible assignments.
-
Constructor Summary
Constructors Modifier Constructor Description protected
FixedValue(Assigner assigner, Assigner.Typing typing)
Creates a new fixed value implementation.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ByteCodeAppender.Size
apply(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, MethodDescription instrumentedMethod, TypeDescription.Generic fixedValueType, StackManipulation valueLoadingInstruction)
Blueprint method that for applying the actual implementation.static FixedValue.AssignerConfigurable
argument(int index)
Returns the argument at the specified index.static Implementation
nullValue()
Returns anull
value from an instrumented method.static FixedValue.AssignerConfigurable
originType()
Returns the origin type from an instrumented method.static FixedValue.AssignerConfigurable
reference(java.lang.Object fixedValue)
Other thanvalue(Object)
, this function will create a fixed value implementation that will always defined a field in the instrumented class.static FixedValue.AssignerConfigurable
reference(java.lang.Object fixedValue, java.lang.String fieldName)
Other thanvalue(Object)
, this function will create a fixed value implementation that will always defined a field in the instrumented class.static FixedValue.AssignerConfigurable
self()
Returnsthis
from an instrumented method.static FixedValue.AssignerConfigurable
value(java.lang.Object fixedValue)
Returns a fixed value from any intercepted method.static FixedValue.AssignerConfigurable
value(TypeDescription fixedValue)
Returns the given type in form of a loaded type.static FixedValue.AssignerConfigurable
value(JavaConstant fixedValue)
Returns the loaded version of the givenJavaConstant
.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.bytebuddy.implementation.Implementation
appender
-
Methods inherited from interface net.bytebuddy.dynamic.scaffold.InstrumentedType.Prepareable
prepare
-
-
-
-
Field Detail
-
assigner
protected final Assigner assigner
The assigner that is used for assigning the fixed value to a method's return type.
-
typing
protected final Assigner.Typing typing
Indicates if dynamic type castings should be attempted for incompatible assignments.
-
-
Constructor Detail
-
FixedValue
protected FixedValue(Assigner assigner, Assigner.Typing typing)
Creates a new fixed value implementation.- Parameters:
assigner
- The assigner to use for assigning the fixed value to the return type of the instrumented value.typing
- Indicates if dynamic type castings should be attempted for incompatible assignments.
-
-
Method Detail
-
value
public static FixedValue.AssignerConfigurable value(java.lang.Object fixedValue)
Returns a fixed value from any intercepted method. The fixed value is stored in the constant pool if this is possible. Specifically, an argument that is a
JavaConstant
,TypeDescription
, primitive,String
orClass
value is stored in the constant pool. Since Java 7,MethodHandle
as well asMethodType
references are also supported. Alternatively, the fixed value is stored in a static field.When a value is stored in the class's constant pool, its identity is lost. If an object's identity is important, the
reference(Object)
method should be used instead.Important: When supplying a method handle or a method type, all types that are implied must be visible to the instrumented type or an
IllegalAccessException
will be thrown at runtime.- Parameters:
fixedValue
- The fixed value to return from the method.- Returns:
- An implementation for the given
value
. - See Also:
value(JavaConstant)
,value(TypeDescription)
,nullValue()
-
reference
public static FixedValue.AssignerConfigurable reference(java.lang.Object fixedValue)
Other thanvalue(Object)
, this function will create a fixed value implementation that will always defined a field in the instrumented class. As a result, object identity will be preserved between the givenvalue
and the value that is returned by instrumented methods. The field name can be explicitly determined. The field name is generated from the fixed value's hash code.- Parameters:
fixedValue
- The fixed value to be returned by methods that are instrumented by this implementation.- Returns:
- An implementation for the given
value
.
-
reference
public static FixedValue.AssignerConfigurable reference(java.lang.Object fixedValue, java.lang.String fieldName)
Other thanvalue(Object)
, this function will create a fixed value implementation that will always defined a field in the instrumented class. As a result, object identity will be preserved between the givenvalue
and the value that is returned by instrumented methods. The field name can be explicitly determined.- Parameters:
fixedValue
- The fixed value to be returned by methods that are instrumented by this implementation.fieldName
- The name of the field for storing the fixed value.- Returns:
- An implementation for the given
value
.
-
value
public static FixedValue.AssignerConfigurable value(TypeDescription fixedValue)
Returns the given type in form of a loaded type. The value is loaded from the written class's constant pool.- Parameters:
fixedValue
- The type to return from the method.- Returns:
- An implementation for the given
value
.
-
value
public static FixedValue.AssignerConfigurable value(JavaConstant fixedValue)
Returns the loaded version of the givenJavaConstant
. The value is loaded from the written class's constant pool.- Parameters:
fixedValue
- The type to return from the method.- Returns:
- An implementation for the given
value
.
-
argument
public static FixedValue.AssignerConfigurable argument(int index)
Returns the argument at the specified index.- Parameters:
index
- The index of the argument to return.- Returns:
- An implementation of a method that returns the argument at the specified index.
-
self
public static FixedValue.AssignerConfigurable self()
Returnsthis
from an instrumented method.- Returns:
- An implementation that returns
this
from a method.
-
nullValue
public static Implementation nullValue()
Returns anull
value from an instrumented method.- Returns:
- An implementation that returns
null
from a method.
-
originType
public static FixedValue.AssignerConfigurable originType()
Returns the origin type from an instrumented method.- Returns:
- An implementation that returns the origin type of the current instrumented type.
-
apply
protected ByteCodeAppender.Size apply(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, MethodDescription instrumentedMethod, TypeDescription.Generic fixedValueType, StackManipulation valueLoadingInstruction)
Blueprint method that for applying the actual implementation.- Parameters:
methodVisitor
- The method visitor to which the implementation is applied to.implementationContext
- The implementation context for the given implementation.instrumentedMethod
- The instrumented method that is target of the implementation.fixedValueType
- A description of the type of the fixed value that is loaded by thevalueLoadingInstruction
.valueLoadingInstruction
- A stack manipulation that represents the loading of the fixed value onto the operand stack.- Returns:
- A representation of the stack and variable array sized that are required for this implementation.
-
-