Class JavaConstant.Dynamic

java.lang.Object
net.bytebuddy.utility.JavaConstant.Dynamic
All Implemented Interfaces:
JavaConstant
Enclosing interface:
JavaConstant

public static class JavaConstant.Dynamic extends Object implements JavaConstant
Represents a dynamically resolved constant pool entry of a class file. This feature is supported for class files in version 11 and newer.
  • Field Details

    • DEFAULT_NAME

      public static final String DEFAULT_NAME
      The default name of a dynamic constant.
      See Also:
    • name

      private final String name
      The name of the dynamic constant.
    • typeDescription

      private final TypeDescription typeDescription
      A description of the represented value's type.
    • bootstrap

      private final JavaConstant.MethodHandle bootstrap
      A handle representation of the bootstrap method.
    • arguments

      private final List<JavaConstant> arguments
      A list of the arguments to the dynamic constant.
  • Constructor Details

    • Dynamic

      protected Dynamic(String name, TypeDescription typeDescription, JavaConstant.MethodHandle bootstrap, List<JavaConstant> arguments)
      Creates a dynamic resolved constant.
      Parameters:
      name - The name of the dynamic constant.
      typeDescription - A description of the represented value's type.
      bootstrap - A handle representation of the bootstrap method.
      arguments - A list of the arguments to the dynamic constant.
  • Method Details

    • ofNullConstant

      public static JavaConstant.Dynamic ofNullConstant()
      Returns a constant null value of type Object.
      Returns:
      A dynamically resolved null constant.
    • ofPrimitiveType

      public static JavaConstant ofPrimitiveType(Class<?> type)
      Returns a Class constant for a primitive type.
      Parameters:
      type - The primitive type to represent.
      Returns:
      A dynamically resolved primitive type constant.
    • ofPrimitiveType

      public static JavaConstant ofPrimitiveType(TypeDescription typeDescription)
      Returns a Class constant for a primitive type.
      Parameters:
      typeDescription - The primitive type to represent.
      Returns:
      A dynamically resolved primitive type constant.
    • ofEnumeration

      public static JavaConstant ofEnumeration(Enum<?> enumeration)
      Returns a Enum value constant.
      Parameters:
      enumeration - The enumeration value to represent.
      Returns:
      A dynamically resolved enumeration constant.
    • ofEnumeration

      public static JavaConstant ofEnumeration(EnumerationDescription enumerationDescription)
      Returns a Enum value constant.
      Parameters:
      enumerationDescription - The enumeration value to represent.
      Returns:
      A dynamically resolved enumeration constant.
    • ofField

      public static JavaConstant.Dynamic ofField(Field field)
      Returns a static, final field constant.
      Parameters:
      field - The field to represent a value of.
      Returns:
      A dynamically resolved field value constant.
    • ofField

      public static JavaConstant.Dynamic ofField(FieldDescription.InDefinedShape fieldDescription)
      Returns a static, final field constant.
      Parameters:
      fieldDescription - The field to represent a value of.
      Returns:
      A dynamically resolved field value constant.
    • ofInvocation

      public static JavaConstant.Dynamic ofInvocation(Method method, Object... constant)
      Represents a constant that is resolved by invoking a static factory method.
      Parameters:
      method - The method to invoke to create the represented constant value.
      constant - The method's constant arguments.
      Returns:
      A dynamic constant that is resolved by the supplied factory method.
    • ofInvocation

      public static JavaConstant.Dynamic ofInvocation(Method method, List<?> constants)
      Represents a constant that is resolved by invoking a static factory method.
      Parameters:
      method - The method to invoke to create the represented constant value.
      constants - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that is resolved by the supplied factory method.
    • ofInvocation

      public static JavaConstant.Dynamic ofInvocation(Constructor<?> constructor, Object... constant)
      Represents a constant that is resolved by invoking a constructor.
      Parameters:
      constructor - The constructor to invoke to create the represented constant value.
      constant - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that is resolved by the supplied constuctor.
    • ofInvocation

      public static JavaConstant.Dynamic ofInvocation(Constructor<?> constructor, List<?> constants)
      Represents a constant that is resolved by invoking a constructor.
      Parameters:
      constructor - The constructor to invoke to create the represented constant value.
      constants - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that is resolved by the supplied constuctor.
    • ofInvocation

      public static JavaConstant.Dynamic ofInvocation(MethodDescription.InDefinedShape methodDescription, Object... constant)
      Represents a constant that is resolved by invoking a static factory method or a constructor.
      Parameters:
      methodDescription - The method or constructor to invoke to create the represented constant value.
      constant - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that is resolved by the supplied factory method or constructor.
    • ofInvocation

      public static JavaConstant.Dynamic ofInvocation(MethodDescription.InDefinedShape methodDescription, List<?> constants)
      Represents a constant that is resolved by invoking a static factory method or a constructor.
      Parameters:
      methodDescription - The method or constructor to invoke to create the represented constant value.
      constants - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that is resolved by the supplied factory method or constructor.
    • ofVarHandle

      public static JavaConstant ofVarHandle(Field field)
      Resolves a var handle constant for a field.
      Parameters:
      field - The field to represent a var handle for.
      Returns:
      A dynamic constant that represents the created var handle constant.
    • ofVarHandle

      public static JavaConstant ofVarHandle(FieldDescription.InDefinedShape fieldDescription)
      Resolves a var handle constant for a field.
      Parameters:
      fieldDescription - The field to represent a var handle for.
      Returns:
      A dynamic constant that represents the created var handle constant.
    • ofArrayVarHandle

      public static JavaConstant ofArrayVarHandle(Class<?> type)
      Resolves a var handle constant for an array.
      Parameters:
      type - The array type for which the var handle is resolved.
      Returns:
      A dynamic constant that represents the created var handle constant.
    • ofArrayVarHandle

      public static JavaConstant ofArrayVarHandle(TypeDescription typeDescription)
      Resolves a var handle constant for an array.
      Parameters:
      typeDescription - The array type for which the var handle is resolved.
      Returns:
      A dynamic constant that represents the created var handle constant.
    • bootstrap

      public static JavaConstant.Dynamic bootstrap(String name, Method method, Object... constant)
      Binds the supplied bootstrap method for the resolution of a dynamic constant.
      Parameters:
      name - The name of the bootstrap constant that is provided to the bootstrap method or constructor.
      method - The bootstrap method to invoke.
      constant - The arguments for the bootstrap method represented as primitive wrapper types, String, TypeDescription or JavaConstant values or their loaded forms.
      Returns:
      A dynamic constant that represents the bootstrapped method's result.
    • bootstrap

      public static JavaConstant.Dynamic bootstrap(String name, Method method, List<?> constants)
      Binds the supplied bootstrap method for the resolution of a dynamic constant.
      Parameters:
      name - The name of the bootstrap constant that is provided to the bootstrap method or constructor.
      method - The bootstrap method to invoke.
      constants - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that represents the bootstrapped method's result.
    • bootstrap

      public static JavaConstant.Dynamic bootstrap(String name, Constructor<?> constructor, Object... constant)
      Binds the supplied bootstrap constructor for the resolution of a dynamic constant.
      Parameters:
      name - The name of the bootstrap constant that is provided to the bootstrap method or constructor.
      constructor - The bootstrap constructor to invoke.
      constant - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that represents the bootstrapped constructor's result.
    • bootstrap

      public static JavaConstant.Dynamic bootstrap(String name, Constructor<?> constructor, List<?> constants)
      Binds the supplied bootstrap constructor for the resolution of a dynamic constant.
      Parameters:
      name - The name of the bootstrap constant that is provided to the bootstrap method or constructor.
      constructor - The bootstrap constructor to invoke.
      constants - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that represents the bootstrapped constructor's result.
    • bootstrap

      public static JavaConstant.Dynamic bootstrap(String name, MethodDescription.InDefinedShape bootstrapMethod, Object... constant)
      Binds the supplied bootstrap method or constructor for the resolution of a dynamic constant.
      Parameters:
      name - The name of the bootstrap constant that is provided to the bootstrap method or constructor.
      bootstrapMethod - The bootstrap method or constructor to invoke.
      constant - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that represents the bootstrapped method's or constructor's result.
    • bootstrap

      public static JavaConstant.Dynamic bootstrap(String name, MethodDescription.InDefinedShape bootstrap, List<?> constants)
      Binds the supplied bootstrap method or constructor for the resolution of a dynamic constant.
      Parameters:
      name - The name of the bootstrap constant that is provided to the bootstrap method or constructor.
      bootstrap - The bootstrap method or constructor to invoke.
      constants - The constant values passed to the bootstrap method. Values can be represented either as TypeDescription, as JavaConstant, as String or a primitive int, long, float or double represented as wrapper type.
      Returns:
      A dynamic constant that represents the bootstrapped method's or constructor's result.
    • getName

      public String getName()
      Returns the name of the dynamic constant.
      Returns:
      The name of the dynamic constant.
    • getBootstrap

      public JavaConstant.MethodHandle getBootstrap()
      Returns a handle representation of the bootstrap method.
      Returns:
      A handle representation of the bootstrap method.
    • getArguments

      public List<JavaConstant> getArguments()
      Returns a list of the arguments to the dynamic constant.
      Returns:
      A list of the arguments to the dynamic constant.
    • withType

      public JavaConstant withType(Class<?> type)
      Resolves this JavaConstant.Dynamic constant to resolve the returned instance to the supplied type. The type must be a subtype of the bootstrap method's return type. Constructors cannot be resolved to a different type.
      Parameters:
      type - The type to resolve the bootstrapped value to.
      Returns:
      This dynamic constant but resolved to the supplied type.
    • withType

      public JavaConstant withType(TypeDescription typeDescription)
      Resolves this JavaConstant.Dynamic constant to resolve the returned instance to the supplied type. The type must be a subtype of the bootstrap method's return type. Constructors cannot be resolved to a different type.
      Parameters:
      typeDescription - The type to resolve the bootstrapped value to.
      Returns:
      This dynamic constant but resolved to the supplied type.
    • toDescription

      public Object toDescription()
      Returns this constant as a Java java.lang.constant.ConstantDesc if the current VM is of at least version 12. If the current VM is of an older version and does not support the type, an exception is thrown.
      Specified by:
      toDescription in interface JavaConstant
      Returns:
      This constant as a Java java.lang.constant.ConstantDesc.
    • accept

      public <T> T accept(JavaConstant.Visitor<T> visitor)
      Applies the supplied visitor to this constant type with its respective callback.
      Specified by:
      accept in interface JavaConstant
      Type Parameters:
      T - The type of the value that is returned by the visitor.
      Parameters:
      visitor - The visitor to dispatch.
      Returns:
      The value that is returned by the supplied visitor.
    • getTypeDescription

      public TypeDescription getTypeDescription()
      Returns a description of the type of the represented instance or at least a stub.
      Specified by:
      getTypeDescription in interface JavaConstant
      Returns:
      A description of the type of the represented instance or at least a stub.
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(@MaybeNull Object object)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object