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 Object implements Implementation
This implementation returns a fixed value for a method. Other than the StubMethod 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:
  • Field Details

    • 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 Details

    • 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 Details

    • value

      public static FixedValue.AssignerConfigurable value(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 or Class value is stored in the constant pool. Since Java 7, MethodHandle as well as MethodType 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:
    • reference

      public static FixedValue.AssignerConfigurable reference(Object value)
      Other than value(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 given value 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:
      value - 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(Object value, String name)
      Other than value(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 given value and the value that is returned by instrumented methods. The field name can be explicitly determined.
      Parameters:
      value - The fixed value to be returned by methods that are instrumented by this implementation.
      name - 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 given JavaConstant. 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()
      Returns this from an instrumented method.
      Returns:
      An implementation that returns this from a method.
    • nullValue

      public static Implementation nullValue()
      Returns a null 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 the valueLoadingInstruction.
      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.