Interface ConstantPoolBuilder

All Superinterfaces:
ClassfileElement, ConstantPool, WritableElement<ConstantPool>
All Known Implementing Classes:
SplitConstantPool, TemporaryConstantPool

public sealed interface ConstantPoolBuilder extends ConstantPool, WritableElement<ConstantPool> permits SplitConstantPool, TemporaryConstantPool
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.
  • Method Details

    • of

      static ConstantPoolBuilder of(ClassModel classModel)
      Returns a new constant pool builder. The new constant pool builder will inherit the classfile processing options of the specified class. If the processing options include Classfile.Option.constantPoolSharing(boolean), (the default) the new constant pool builder will be also 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

      Returns a new constant pool builder. The new constant pool builder will be empty and have the specified classfile processing options.
      Parameters:
      options - the processing options
      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
    • writeBootstrapMethods

      boolean writeBootstrapMethods(BufWriter buf)
      Writes associated bootstrap method entries to the specified writer
      Parameters:
      buf - the writer
      Returns:
      false when no bootstrap method entry has been written
    • 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
    • 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
    • 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
    • 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
    • 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
      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 descripbing the provided Integer, Long, Float, Double, or String constant.
      Parameters:
      c - the constant
      Returns:
      A ConstantValueEntry descripbing the provided Integer, Long, Float, Double, or String constant
    • 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
    • annotationConstantValueEntry

      default AnnotationConstantValueEntry annotationConstantValueEntry(ConstantDesc c)
      Returns An AnnotationConstantValueEntry describing the provided constant. The constant should be an Integer, String, Long, Float, Double, ClassDesc (for a Class constant), or MethodTypeDesc (for a MethodType constant.)
      Parameters:
      c - the constant
      Returns:
      An AnnotationConstantValueEntry 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