Class ConstantPool

  • All Implemented Interfaces:
    Cloneable, Node

    public class ConstantPool
    extends Object
    implements Cloneable, Node
    This class represents the constant pool, i.e., a table of constants, of a parsed classfile. It may contain null references, due to the JVM specification that skips an entry after an 8-byte constant (double, long) entry. Those interested in generating constant pools programatically should see ConstantPoolGen.
    See Also:
    Constant, ConstantPoolGen
    • Method Detail

      • accept

        public void accept​(Visitor v)
        Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class. I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
        Specified by:
        accept in interface Node
        Parameters:
        v - Visitor object
      • constantToString

        public String constantToString​(int index,
                                       byte tag)
                                throws ClassFormatException
        Retrieves constant at `index' from constant pool and resolve it to a string representation.
        Parameters:
        index - of constant in constant pool
        tag - expected type
        Returns:
        String representation
        Throws:
        ClassFormatException
      • getConstant

        public Constant getConstant​(int index)
        Gets constant from constant pool.
        Parameters:
        index - Index in constant pool
        Returns:
        Constant value
        See Also:
        Constant
      • getConstant

        public Constant getConstant​(int index,
                                    byte tag)
                             throws ClassFormatException
        Gets constant from constant pool and check whether it has the expected type.
        Parameters:
        index - Index in constant pool
        tag - Tag of expected constant, i.e., its type
        Returns:
        Constant value
        Throws:
        ClassFormatException
        See Also:
        Constant
      • getConstantPool

        public Constant[] getConstantPool()
        Returns:
        Array of constants.
        See Also:
        Constant
      • getConstantString

        public String getConstantString​(int index,
                                        byte tag)
                                 throws ClassFormatException
        Gets string from constant pool and bypass the indirection of `ConstantClass' and `ConstantString' objects. I.e. these classes have an index field that points to another entry of the constant pool of type `ConstantUtf8' which contains the real data.
        Parameters:
        index - Index in constant pool
        tag - Tag of expected constant, either ConstantClass or ConstantString
        Returns:
        Contents of string reference
        Throws:
        ClassFormatException
        See Also:
        ConstantClass, ConstantString
      • getLength

        public int getLength()
        Returns:
        Length of constant pool.
      • setConstant

        public void setConstant​(int index,
                                Constant constant)
        Parameters:
        constant - Constant to set
      • setConstantPool

        public void setConstantPool​(Constant[] constantPool)
        Parameters:
        constantPool -
      • toString

        public String toString()
        Overrides:
        toString in class Object
        Returns:
        String representation.
      • copy

        public ConstantPool copy()
        Returns:
        deep copy of this constant pool