Interface ConstantPoolBuilder

All Superinterfaces:
ConstantPool, Iterable<PoolEntry>

public sealed interface ConstantPoolBuilder extends ConstantPool
Builder for the constant pool of a classfile. Provides read and write access to the constant pool that is being built. Writing is append-only and idempotent (entry-bearing methods will return an existing entry if there is one). A ConstantPoolBuilder is associated with a ClassBuilder. The ConstantPoolBuilder also provides access to some of the state of the ClassBuilder, such as classfile processing options.
Since:
24
  • Method Details

    • of

      static ConstantPoolBuilder of(ClassModel classModel)
      Returns a new constant pool builder. The new constant pool builder will be pre-populated with the contents of the constant pool associated with the class reader.
      Parameters:
      classModel - the class to copy from
      Returns:
      a new constant pool builder
    • of

      static ConstantPoolBuilder of()
      Returns a new constant pool builder. The new constant pool builder will be empty.
      Returns:
      a new constant pool builder
    • canWriteDirect

      boolean canWriteDirect(ConstantPool constantPool)
      Returns whether the provided constant pool is index-compatible with this one. This may be because they are the same constant pool, or because this constant pool was copied from the other.
      Parameters:
      constantPool - the other constant pool
      Returns:
      whether the provided constant pool is index-compatible with this one
    • utf8Entry

      Utf8Entry utf8Entry(String s)
      Returns A Utf8Entry describing the provided String. If a UTF8 entry in the pool already describes this string, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      s - the string
      Returns:
      A Utf8Entry describing the provided String
    • utf8Entry

      default Utf8Entry utf8Entry(ClassDesc desc)
      Returns A Utf8Entry describing the field descriptor of the provided ClassDesc. If a UTF8 entry in the pool already describes this field descriptor, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      desc - the symbolic descriptor for the class
      Returns:
      A Utf8Entry describing the field descriptor of the provided ClassDesc
    • utf8Entry

      default Utf8Entry utf8Entry(MethodTypeDesc desc)
      Returns A Utf8Entry describing the method descriptor of the provided MethodTypeDesc. If a UTF8 entry in the pool already describes this field descriptor, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      desc - the symbolic descriptor for the method type
      Returns:
      A Utf8Entry describing the method descriptor of the provided MethodTypeDesc
    • classEntry

      ClassEntry classEntry(Utf8Entry ne)
      Returns A ClassEntry describing the class whose internal name is encoded in the provided Utf8Entry. If a Class entry in the pool already describes this class, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      ne - the constant pool entry describing the internal name of the class
      Returns:
      A ClassEntry describing the class whose internal name is encoded in the provided Utf8Entry
    • classEntry

      default ClassEntry classEntry(ClassDesc classDesc)
      Returns A ClassEntry describing the class described by provided ClassDesc. If a Class entry in the pool already describes this class, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      classDesc - the symbolic descriptor for the class
      Returns:
      A ClassEntry describing the class described by provided ClassDesc
      Throws:
      IllegalArgumentException - if classDesc represents a primitive type
    • packageEntry

      PackageEntry packageEntry(Utf8Entry nameEntry)
      Returns A PackageEntry describing the class whose internal name is encoded in the provided Utf8Entry. If a Package entry in the pool already describes this class, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      nameEntry - the constant pool entry describing the internal name of the package
      Returns:
      A PackageEntry describing the class whose internal name is encoded in the provided Utf8Entry
    • packageEntry

      default PackageEntry packageEntry(PackageDesc packageDesc)
      Returns A PackageEntry describing the class described by provided PackageDesc. If a Package entry in the pool already describes this class, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      packageDesc - the symbolic descriptor for the class
      Returns:
      A PackageEntry describing the class described by provided PackageDesc
    • moduleEntry

      ModuleEntry moduleEntry(Utf8Entry moduleName)
      Returns A ModuleEntry describing the module whose name is encoded in the provided Utf8Entry. If a module entry in the pool already describes this class, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      moduleName - the constant pool entry describing the module name
      Returns:
      A ModuleEntry describing the module whose name is encoded in the provided Utf8Entry
    • moduleEntry

      default ModuleEntry moduleEntry(ModuleDesc moduleDesc)
      Returns A ModuleEntry describing the module described by provided ModuleDesc. If a module entry in the pool already describes this class, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      moduleDesc - the symbolic descriptor for the class
      Returns:
      A ModuleEntry describing the module described by provided ModuleDesc
    • nameAndTypeEntry

      NameAndTypeEntry nameAndTypeEntry(Utf8Entry nameEntry, Utf8Entry typeEntry)
      Returns A NameAndTypeEntry describing the provided name and type. If a NameAndType entry in the pool already describes this name and type, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      nameEntry - the member name
      typeEntry - the member field or method descriptor
      Returns:
      A NameAndTypeEntry describing the provided name and type
    • nameAndTypeEntry

      default NameAndTypeEntry nameAndTypeEntry(String name, ClassDesc type)
      Returns A NameAndTypeEntry describing the provided name and type. If a NameAndType entry in the pool already describes this name and type, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      name - the member name
      type - the symbolic descriptor for a field type
      Returns:
      A NameAndTypeEntry describing the provided name and type
    • nameAndTypeEntry

      default NameAndTypeEntry nameAndTypeEntry(String name, MethodTypeDesc type)
      Returns A NameAndTypeEntry describing the provided name and type. If a NameAndType entry in the pool already describes this name and type, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      name - the member name
      type - the symbolic descriptor for a method type
      Returns:
      A NameAndTypeEntry describing the provided name and type
    • fieldRefEntry

      FieldRefEntry fieldRefEntry(ClassEntry owner, NameAndTypeEntry nameAndType)
      Returns A FieldRefEntry describing a field of a class. If a FieldRef entry in the pool already describes this field, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      owner - the class the field is a member of
      nameAndType - the name and type of the field
      Returns:
      A FieldRefEntry describing a field of a class
    • fieldRefEntry

      default FieldRefEntry fieldRefEntry(ClassDesc owner, String name, ClassDesc type)
      Returns A FieldRefEntry describing a field of a class. If a FieldRef entry in the pool already describes this field, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      owner - the class the field is a member of
      name - the name of the field
      type - the type of the field
      Returns:
      A FieldRefEntry describing a field of a class
      Throws:
      IllegalArgumentException - if owner represents a primitive type
    • methodRefEntry

      MethodRefEntry methodRefEntry(ClassEntry owner, NameAndTypeEntry nameAndType)
      Returns A MethodRefEntry describing a method of a class. If a MethodRefEntry entry in the pool already describes this method, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      owner - the class the method is a member of
      nameAndType - the name and type of the method
      Returns:
      A MethodRefEntry describing a method of a class
    • methodRefEntry

      default MethodRefEntry methodRefEntry(ClassDesc owner, String name, MethodTypeDesc type)
      Returns A MethodRefEntry describing a method of a class. If a MethodRefEntry entry in the pool already describes this method, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      owner - the class the method is a member of
      name - the name of the method
      type - the type of the method
      Returns:
      A MethodRefEntry describing a method of a class
      Throws:
      IllegalArgumentException - if owner represents a primitive type
    • interfaceMethodRefEntry

      InterfaceMethodRefEntry interfaceMethodRefEntry(ClassEntry owner, NameAndTypeEntry nameAndType)
      Returns A InterfaceMethodRefEntry describing a method of a class. If a InterfaceMethodRefEntry entry in the pool already describes this method, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      owner - the class the method is a member of
      nameAndType - the name and type of the method
      Returns:
      A InterfaceMethodRefEntry describing a method of a class
    • interfaceMethodRefEntry

      default InterfaceMethodRefEntry interfaceMethodRefEntry(ClassDesc owner, String name, MethodTypeDesc type)
      Returns A InterfaceMethodRefEntry describing a method of a class. If a InterfaceMethodRefEntry entry in the pool already describes this method, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      owner - the class the method is a member of
      name - the name of the method
      type - the type of the method
      Returns:
      A InterfaceMethodRefEntry describing a method of a class
      Throws:
      IllegalArgumentException - if owner represents a primitive type
    • methodTypeEntry

      MethodTypeEntry methodTypeEntry(MethodTypeDesc descriptor)
      Returns A MethodTypeEntry describing a method type. If a MethodType entry in the pool already describes this method type, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      descriptor - the symbolic descriptor of the method type
      Returns:
      A MethodTypeEntry describing a method type
    • methodTypeEntry

      MethodTypeEntry methodTypeEntry(Utf8Entry descriptor)
      Returns A MethodTypeEntry describing a method type. If a MethodType entry in the pool already describes this method type, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      descriptor - the constant pool entry for the method type descriptor
      Returns:
      A MethodTypeEntry describing a method type
    • methodHandleEntry

      default MethodHandleEntry methodHandleEntry(DirectMethodHandleDesc descriptor)
      Returns A MethodHandleEntry describing a direct method handle. If a MethodHandle entry in the pool already describes this method handle, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      descriptor - the symbolic descriptor of the method handle
      Returns:
      A MethodHandleEntry describing a direct method handle
    • methodHandleEntry

      MethodHandleEntry methodHandleEntry(int refKind, MemberRefEntry reference)
      Returns A MethodHandleEntry describing a field accessor or method. If a MethodHandle entry in the pool already describes this method handle, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      refKind - the reference kind of the method handle (JVMS 4.4.8)
      reference - the constant pool entry describing the field or method
      Returns:
      A MethodHandleEntry describing a field accessor or method
    • invokeDynamicEntry

      default InvokeDynamicEntry invokeDynamicEntry(DynamicCallSiteDesc dcsd)
      Returns An InvokeDynamicEntry describing a dynamic call site. If an InvokeDynamic entry in the pool already describes this site, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      dcsd - the symbolic descriptor of the method handle
      Returns:
      An InvokeDynamicEntry describing a dynamic call site
    • invokeDynamicEntry

      InvokeDynamicEntry invokeDynamicEntry(BootstrapMethodEntry bootstrapMethodEntry, NameAndTypeEntry nameAndType)
      Returns An InvokeDynamicEntry describing a dynamic call site. If an InvokeDynamic entry in the pool already describes this site, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      bootstrapMethodEntry - the entry in the bootstrap method table
      nameAndType - the invocation name and type
      Returns:
      An InvokeDynamicEntry describing a dynamic call site
    • constantDynamicEntry

      default ConstantDynamicEntry constantDynamicEntry(DynamicConstantDesc<?> dcd)
      Returns A ConstantDynamicEntry describing a dynamic constant. If a ConstantDynamic entry in the pool already describes this site, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      dcd - the symbolic descriptor of the constant
      Returns:
      A ConstantDynamicEntry describing a dynamic constant
    • constantDynamicEntry

      ConstantDynamicEntry constantDynamicEntry(BootstrapMethodEntry bootstrapMethodEntry, NameAndTypeEntry nameAndType)
      Returns A ConstantDynamicEntry describing a dynamic constant. If a ConstantDynamic entry in the pool already describes this site, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      bootstrapMethodEntry - the entry in the bootstrap method table
      nameAndType - the invocation name and type
      Returns:
      A ConstantDynamicEntry describing a dynamic constant
    • intEntry

      IntegerEntry intEntry(int value)
      Returns An IntegerEntry describing the provided value. If an integer entry in the pool already describes this value, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      value - the value
      Returns:
      An IntegerEntry describing the provided value
    • floatEntry

      FloatEntry floatEntry(float value)
      Returns A FloatEntry describing the provided value. If a float entry in the pool already describes this value, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      value - the value
      Returns:
      A FloatEntry describing the provided value
    • longEntry

      LongEntry longEntry(long value)
      Returns A LongEntry describing the provided value. If a long entry in the pool already describes this value, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      value - the value
      Returns:
      A LongEntry describing the provided value
    • doubleEntry

      DoubleEntry doubleEntry(double value)
      Returns A DoubleEntry describing the provided value. If a double entry in the pool already describes this value, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      value - the value
      Returns:
      A DoubleEntry describing the provided value
    • stringEntry

      StringEntry stringEntry(Utf8Entry utf8)
      Returns A StringEntry referencing the provided UTF8 entry. If a String entry in the pool already describes this value, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      utf8 - the UTF8 entry describing the string
      Returns:
      A StringEntry referencing the provided UTF8 entry
    • stringEntry

      default StringEntry stringEntry(String value)
      Returns A StringEntry describing the provided value. If a string entry in the pool already describes this value, it is returned; otherwise, a new entry is added and the new entry is returned.
      Parameters:
      value - the value
      Returns:
      A StringEntry describing the provided value
    • constantValueEntry

      default ConstantValueEntry constantValueEntry(ConstantDesc c)
      Returns A ConstantValueEntry describing the provided Integer, Long, Float, Double, or String constant.
      Parameters:
      c - the constant
      Returns:
      A ConstantValueEntry describing the provided Integer, Long, Float, Double, or String constant
      See Also:
    • loadableConstantEntry

      default LoadableConstantEntry loadableConstantEntry(ConstantDesc c)
      Returns A LoadableConstantEntry describing the provided constant. The constant should be an Integer, String, Long, Float, Double, ClassDesc (for a Class constant), MethodTypeDesc (for a MethodType constant), DirectMethodHandleDesc (for a MethodHandle constant), or a DynamicConstantDesc (for a dynamic constant.)
      Parameters:
      c - the constant
      Returns:
      A LoadableConstantEntry describing the provided constant
    • bsmEntry

      default BootstrapMethodEntry bsmEntry(DirectMethodHandleDesc methodReference, List<ConstantDesc> arguments)
      Returns a BootstrapMethodEntry describing the provided bootstrap method and static arguments.
      Parameters:
      methodReference - the bootstrap method
      arguments - the bootstrap arguments
      Returns:
      a BootstrapMethodEntry describing the provided bootstrap method and static arguments
    • bsmEntry

      BootstrapMethodEntry bsmEntry(MethodHandleEntry methodReference, List<LoadableConstantEntry> arguments)
      Returns a BootstrapMethodEntry describing the provided bootstrap method and static arguments.
      Parameters:
      methodReference - the bootstrap method
      arguments - the bootstrap arguments
      Returns:
      a BootstrapMethodEntry describing the provided bootstrap method and static arguments