Class JavaConstant.Dynamic

  • All Implemented Interfaces:
    ConstantValue, JavaConstant
    Enclosing interface:
    JavaConstant

    public static class JavaConstant.Dynamic
    extends java.lang.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 Detail

      • DEFAULT_NAME

        public static final java.lang.String DEFAULT_NAME
        The default name of a dynamic constant.
        See Also:
        Constant Field Values
      • name

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

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

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

      • Dynamic

        protected Dynamic​(java.lang.String name,
                          TypeDescription typeDescription,
                          JavaConstant.MethodHandle bootstrap,
                          java.util.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 Detail

      • 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​(java.lang.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​(java.lang.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​(java.lang.reflect.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​(java.lang.reflect.Method method,
                                                        java.lang.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​(java.lang.reflect.Method method,
                                                        java.util.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​(java.lang.reflect.Constructor<?> constructor,
                                                        java.lang.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​(java.lang.reflect.Constructor<?> constructor,
                                                        java.util.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,
                                                        java.lang.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,
                                                        java.util.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​(java.lang.reflect.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​(java.lang.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​(java.lang.String name,
                                                     java.lang.reflect.Method method,
                                                     java.lang.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​(java.lang.String name,
                                                     java.lang.reflect.Method method,
                                                     java.util.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​(java.lang.String name,
                                                     java.lang.reflect.Constructor<?> constructor,
                                                     java.lang.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​(java.lang.String name,
                                                     java.lang.reflect.Constructor<?> constructor,
                                                     java.util.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​(java.lang.String name,
                                                     MethodDescription.InDefinedShape bootstrapMethod,
                                                     java.lang.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​(java.lang.String name,
                                                     MethodDescription.InDefinedShape bootstrap,
                                                     java.util.List<?> arguments)
        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.
        arguments - 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 java.lang.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 java.util.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​(java.lang.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 java.lang.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 this constant.
        Specified by:
        getTypeDescription in interface ConstantValue
        Returns:
        A description of the type of this constant.
      • hashCode

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

        public boolean equals​(@MaybeNull
                              java.lang.Object object)
        Overrides:
        equals in class java.lang.Object
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object