Module java.base

Class DynamicConstantDesc<T>

    • Constructor Detail

      • DynamicConstantDesc

        protected DynamicConstantDesc​(DirectMethodHandleDesc bootstrapMethod,
                                      String constantName,
                                      ClassDesc constantType,
                                      ConstantDesc... bootstrapArgs)
        Creates a nominal descriptor for a dynamic constant.
        Parameters:
        bootstrapMethod - a DirectMethodHandleDesc describing the bootstrap method for the constant
        constantName - The unqualified name that would appear in the NameAndType operand of the LDC for this constant
        constantType - a ClassDesc describing the type that would appear in the NameAndType operand of the LDC for this constant
        bootstrapArgs - ConstantDescs describing the static arguments to the bootstrap, that would appear in the BootstrapMethods attribute
        Throws:
        NullPointerException - if any argument is null
        IllegalArgumentException - if the name has the incorrect format
        See The Java™ Virtual Machine Specification:
        4.2.2 Unqualified Names
    • Method Detail

      • ofCanonical

        public static <T> ConstantDesc ofCanonical​(DirectMethodHandleDesc bootstrapMethod,
                                                   String constantName,
                                                   ClassDesc constantType,
                                                   ConstantDesc[] bootstrapArgs)
        Returns a nominal descriptor for a dynamic constant, transforming it into a more specific type if the constant bootstrap is a well-known one and a more specific nominal descriptor type (e.g., ClassDesc) is available.

        Classes whose Constable.describeConstable() method produce a DynamicConstantDesc with a well-known bootstrap including Class (for instances describing primitive types), Enum, and VarHandle.

        Bytecode-reading APIs that process the constant pool and wish to expose entries as ConstantDesc to their callers should generally use this method in preference to ofNamed(DirectMethodHandleDesc, String, ClassDesc, ConstantDesc...) because this may result in a more specific type that can be provided to callers.

        Type Parameters:
        T - the type of the dynamic constant
        Parameters:
        bootstrapMethod - a DirectMethodHandleDesc describing the bootstrap method for the constant
        constantName - The unqualified name that would appear in the NameAndType operand of the LDC for this constant
        constantType - a ClassDesc describing the type that would appear in the NameAndType operand of the LDC for this constant
        bootstrapArgs - ConstantDescs describing the static arguments to the bootstrap, that would appear in the BootstrapMethods attribute
        Returns:
        the nominal descriptor
        Throws:
        NullPointerException - if any argument is null
        IllegalArgumentException - if the name has the incorrect format
        See The Java™ Virtual Machine Specification:
        4.2.2 Unqualified Names
      • ofNamed

        public static <T> DynamicConstantDesc<T> ofNamed​(DirectMethodHandleDesc bootstrapMethod,
                                                         String constantName,
                                                         ClassDesc constantType,
                                                         ConstantDesc... bootstrapArgs)
        Returns a nominal descriptor for a dynamic constant.
        Type Parameters:
        T - the type of the dynamic constant
        Parameters:
        bootstrapMethod - a DirectMethodHandleDesc describing the bootstrap method for the constant
        constantName - The unqualified name that would appear in the NameAndType operand of the LDC for this constant
        constantType - a ClassDesc describing the type that would appear in the NameAndType operand of the LDC for this constant
        bootstrapArgs - ConstantDescs describing the static arguments to the bootstrap, that would appear in the BootstrapMethods attribute
        Returns:
        the nominal descriptor
        Throws:
        NullPointerException - if any argument is null
        IllegalArgumentException - if the name has the incorrect format
        See The Java™ Virtual Machine Specification:
        4.2.2 Unqualified Names
      • of

        public static <T> DynamicConstantDesc<T> of​(DirectMethodHandleDesc bootstrapMethod,
                                                    ConstantDesc... bootstrapArgs)
        Returns a nominal descriptor for a dynamic constant whose name parameter is ConstantDescs.DEFAULT_NAME, and whose type parameter is always the same as the bootstrap method return type.
        Type Parameters:
        T - the type of the dynamic constant
        Parameters:
        bootstrapMethod - a DirectMethodHandleDesc describing the bootstrap method for the constant
        bootstrapArgs - ConstantDescs describing the static arguments to the bootstrap, that would appear in the BootstrapMethods attribute
        Returns:
        the nominal descriptor
        Throws:
        NullPointerException - if any argument is null
        See The Java™ Virtual Machine Specification:
        4.2.2 Unqualified Names
      • of

        public static <T> DynamicConstantDesc<T> of​(DirectMethodHandleDesc bootstrapMethod)
        Returns a nominal descriptor for a dynamic constant whose bootstrap has no static arguments, whose name parameter is ConstantDescs.DEFAULT_NAME, and whose type parameter is always the same as the bootstrap method return type.
        Type Parameters:
        T - the type of the dynamic constant
        Parameters:
        bootstrapMethod - a DirectMethodHandleDesc describing the bootstrap method for the constant
        Returns:
        the nominal descriptor
        Throws:
        NullPointerException - if any argument is null
      • constantName

        public String constantName()
        Returns the name that would appear in the NameAndType operand of the LDC for this constant.
        Returns:
        the constant name
      • constantType

        public ClassDesc constantType()
        Returns a ClassDesc describing the type that would appear in the NameAndType operand of the LDC for this constant.
        Returns:
        the constant type
      • bootstrapArgs

        public ConstantDesc[] bootstrapArgs()
        Returns the bootstrap arguments for this constant.
        Returns:
        the bootstrap arguments
      • bootstrapArgsList

        public List<ConstantDesc> bootstrapArgsList()
        Returns the bootstrap arguments for this constant as an immutable List.
        Returns:
        a List of the bootstrap arguments
      • equals

        public final boolean equals​(Object o)
        Compares the specified object with this descriptor for equality. Returns true if and only if the specified object is also a DynamicConstantDesc, and both descriptors have equal bootstrap methods, bootstrap argument lists, constant name, and constant type.
        Overrides:
        equals in class Object
        Parameters:
        o - the DynamicConstantDesc to compare to this DynamicConstantDesc
        Returns:
        true if the specified DynamicConstantDesc is equals to this DynamicConstantDesc.
        See Also:
        Object.hashCode(), HashMap
      • toString

        public String toString()
        Returns a compact textual description of this constant description, including the bootstrap method, the constant name and type, and the static bootstrap arguments.
        Overrides:
        toString in class Object
        Returns:
        A compact textual description of this call site descriptor