Class ConstantPool

  • All Implemented Interfaces:
    java.lang.Cloneable, Node

    public class ConstantPool
    extends java.lang.Object
    implements java.lang.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
    • Constructor Summary

      Constructors 
      Constructor Description
      ConstantPool​(java.io.DataInput input)
      Reads constants from given input stream.
      ConstantPool​(Constant[] constantPool)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void accept​(Visitor v)
      Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class.
      java.lang.String constantToString​(int index, byte tag)
      Retrieves constant at `index' from constant pool and resolve it to a string representation.
      java.lang.String constantToString​(Constant c)
      Resolves constant to a string representation.
      ConstantPool copy()  
      void dump​(java.io.DataOutputStream file)
      Dump constant pool to file stream in binary format.
      Constant getConstant​(int index)
      Gets constant from constant pool.
      Constant getConstant​(int index, byte tag)
      Gets constant from constant pool and check whether it has the expected type.
      Constant[] getConstantPool()  
      java.lang.String getConstantString​(int index, byte tag)
      Gets string from constant pool and bypass the indirection of `ConstantClass' and `ConstantString' objects.
      int getLength()  
      void setConstant​(int index, Constant constant)  
      void setConstantPool​(Constant[] constantPool)  
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • ConstantPool

        public ConstantPool​(Constant[] constantPool)
        Parameters:
        constantPool - Array of constants
      • ConstantPool

        public ConstantPool​(java.io.DataInput input)
                     throws java.io.IOException,
                            ClassFormatException
        Reads constants from given input stream.
        Parameters:
        input - Input stream
        Throws:
        java.io.IOException
        ClassFormatException
    • 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 java.lang.String constantToString​(Constant c)
                                          throws ClassFormatException
        Resolves constant to a string representation.
        Parameters:
        c - Constant to be printed
        Returns:
        String representation
        Throws:
        ClassFormatException
      • constantToString

        public java.lang.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
      • dump

        public void dump​(java.io.DataOutputStream file)
                  throws java.io.IOException
        Dump constant pool to file stream in binary format.
        Parameters:
        file - Output file stream
        Throws:
        java.io.IOException
      • 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 java.lang.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 java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        Returns:
        String representation.
      • copy

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