Class JavaConstant.Dynamic

  • All Implemented Interfaces:
    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

      • CONSTANT_BOOTSTRAPS

        private static final java.lang.String CONSTANT_BOOTSTRAPS
        The java.lang.invoke.ConstantBootstraps class's internal name..
        See Also:
        Constant Field Values
      • value

        private final org.objectweb.asm.ConstantDynamic value
        The represented bootstrap value.
      • typeDescription

        private final TypeDescription typeDescription
        The represented value constant.
    • Constructor Detail

      • Dynamic

        protected Dynamic​(org.objectweb.asm.ConstantDynamic value,
                          TypeDescription typeDescription)
        Creates a new dynamic class pool entry.
        Parameters:
        value - The represented bootstrap value.
        typeDescription - The represented value 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<?> 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.
      • 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.
      • asConstantPoolValue

        public java.lang.Object asConstantPoolValue()
        Returns the represented instance as a constant pool value.
        Specified by:
        asConstantPoolValue in interface JavaConstant
        Returns:
        The constant pool value in a format that can be written by ASM.
      • getType

        public TypeDescription getType()
        Returns a description of the type of the represented instance or at least a stub.
        Specified by:
        getType 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 java.lang.Object
      • equals

        public boolean equals​(java.lang.Object other)
        Overrides:
        equals in class java.lang.Object