Class ConstantPoolGen


  • public class ConstantPoolGen
    extends java.lang.Object
    This class is used to build up a constant pool. The user adds constants via `addXXX' methods, `addString', `addClass', etc.. These methods return an index into the constant pool. Finally, `getFinalConstantPool()' returns the constant pool built up. Intermediate versions of the constant pool can be obtained with `getConstantPool()'. A constant pool has capacity for Constants.MAX_SHORT entries. Note that the first (0) is used by the JVM and that Double and Long constants need two slots.
    See Also:
    Constant
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected Constant[] constants
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
      protected int index
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getSize()
      protected int size
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int addArrayClass​(ArrayType type)
      Add a reference to an array class (e.g.
      int addClass​(java.lang.String str)
      Add a new Class reference to the ConstantPool, if it is not already in there.
      int addClass​(ObjectType type)
      Add a new Class reference to the ConstantPool for a given type.
      int addConstant​(Constant c, ConstantPoolGen cp)
      Import constant from another ConstantPool and return new index.
      int addDouble​(double n)
      Add a new double constant to the ConstantPool, if it is not already in there.
      int addFieldref​(java.lang.String class_name, java.lang.String field_name, java.lang.String signature)
      Add a new Fieldref constant to the ConstantPool, if it is not already in there.
      int addFloat​(float n)
      Add a new Float constant to the ConstantPool, if it is not already in there.
      int addInteger​(int n)
      Add a new Integer constant to the ConstantPool, if it is not already in there.
      int addInterfaceMethodref​(java.lang.String class_name, java.lang.String method_name, java.lang.String signature)
      Add a new InterfaceMethodref constant to the ConstantPool, if it is not already in there.
      int addInterfaceMethodref​(MethodGen method)  
      int addLong​(long n)
      Add a new long constant to the ConstantPool, if it is not already in there.
      int addMethodref​(java.lang.String class_name, java.lang.String method_name, java.lang.String signature)
      Add a new Methodref constant to the ConstantPool, if it is not already in there.
      int addMethodref​(MethodGen method)  
      int addNameAndType​(java.lang.String name, java.lang.String signature)
      Add a new NameAndType constant to the ConstantPool if it is not already in there.
      int addString​(java.lang.String str)
      Add a new String constant to the ConstantPool, if it is not already in there.
      int addUtf8​(java.lang.String n)
      Add a new Utf8 constant to the ConstantPool, if it is not already in there.
      protected void adjustSize()
      Resize internal array of constants.
      Constant getConstant​(int i)  
      ConstantPool getConstantPool()  
      ConstantPool getFinalConstantPool()  
      int getSize()  
      int lookupClass​(java.lang.String str)
      Look for ConstantClass in ConstantPool named `str'.
      int lookupDouble​(double n)
      Look for ConstantDouble in ConstantPool.
      int lookupFieldref​(java.lang.String class_name, java.lang.String field_name, java.lang.String signature)
      Look for ConstantFieldref in ConstantPool.
      int lookupFloat​(float n)
      Look for ConstantFloat in ConstantPool.
      int lookupInteger​(int n)
      Look for ConstantInteger in ConstantPool.
      int lookupInterfaceMethodref​(java.lang.String class_name, java.lang.String method_name, java.lang.String signature)
      Look for ConstantInterfaceMethodref in ConstantPool.
      int lookupInterfaceMethodref​(MethodGen method)  
      int lookupLong​(long n)
      Look for ConstantLong in ConstantPool.
      int lookupMethodref​(java.lang.String class_name, java.lang.String method_name, java.lang.String signature)
      Look for ConstantMethodref in ConstantPool.
      int lookupMethodref​(MethodGen method)  
      int lookupNameAndType​(java.lang.String name, java.lang.String signature)
      Look for ConstantNameAndType in ConstantPool.
      int lookupString​(java.lang.String str)
      Look for ConstantString in ConstantPool containing String `str'.
      int lookupUtf8​(java.lang.String n)
      Look for ConstantUtf8 in ConstantPool.
      void setConstant​(int i, Constant c)
      Use with care!
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

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

      • size

        @Deprecated
        protected int size
        Deprecated.
        (since 6.0) will be made private; do not access directly, use getter/setter
      • constants

        @Deprecated
        protected Constant[] constants
        Deprecated.
        (since 6.0) will be made private; do not access directly, use getter/setter
      • index

        @Deprecated
        protected int index
        Deprecated.
        (since 6.0) will be made private; do not access directly, use getSize()
    • Constructor Detail

      • ConstantPoolGen

        public ConstantPoolGen​(Constant[] cs)
        Initialize with given array of constants.
        Parameters:
        cs - array of given constants, new ones will be appended
      • ConstantPoolGen

        public ConstantPoolGen​(ConstantPool cp)
        Initialize with given constant pool.
      • ConstantPoolGen

        public ConstantPoolGen()
        Create empty constant pool.
    • Method Detail

      • adjustSize

        protected void adjustSize()
        Resize internal array of constants.
      • lookupString

        public int lookupString​(java.lang.String str)
        Look for ConstantString in ConstantPool containing String `str'.
        Parameters:
        str - String to search for
        Returns:
        index on success, -1 otherwise
      • addString

        public int addString​(java.lang.String str)
        Add a new String constant to the ConstantPool, if it is not already in there.
        Parameters:
        str - String to add
        Returns:
        index of entry
      • lookupClass

        public int lookupClass​(java.lang.String str)
        Look for ConstantClass in ConstantPool named `str'.
        Parameters:
        str - String to search for
        Returns:
        index on success, -1 otherwise
      • addClass

        public int addClass​(java.lang.String str)
        Add a new Class reference to the ConstantPool, if it is not already in there.
        Parameters:
        str - Class to add
        Returns:
        index of entry
      • addClass

        public int addClass​(ObjectType type)
        Add a new Class reference to the ConstantPool for a given type.
        Parameters:
        type - Class to add
        Returns:
        index of entry
      • addArrayClass

        public int addArrayClass​(ArrayType type)
        Add a reference to an array class (e.g. String[][]) as needed by MULTIANEWARRAY instruction, e.g. to the ConstantPool.
        Parameters:
        type - type of array class
        Returns:
        index of entry
      • lookupInteger

        public int lookupInteger​(int n)
        Look for ConstantInteger in ConstantPool.
        Parameters:
        n - integer number to look for
        Returns:
        index on success, -1 otherwise
      • addInteger

        public int addInteger​(int n)
        Add a new Integer constant to the ConstantPool, if it is not already in there.
        Parameters:
        n - integer number to add
        Returns:
        index of entry
      • lookupFloat

        public int lookupFloat​(float n)
        Look for ConstantFloat in ConstantPool.
        Parameters:
        n - Float number to look for
        Returns:
        index on success, -1 otherwise
      • addFloat

        public int addFloat​(float n)
        Add a new Float constant to the ConstantPool, if it is not already in there.
        Parameters:
        n - Float number to add
        Returns:
        index of entry
      • lookupUtf8

        public int lookupUtf8​(java.lang.String n)
        Look for ConstantUtf8 in ConstantPool.
        Parameters:
        n - Utf8 string to look for
        Returns:
        index on success, -1 otherwise
      • addUtf8

        public int addUtf8​(java.lang.String n)
        Add a new Utf8 constant to the ConstantPool, if it is not already in there.
        Parameters:
        n - Utf8 string to add
        Returns:
        index of entry
      • lookupLong

        public int lookupLong​(long n)
        Look for ConstantLong in ConstantPool.
        Parameters:
        n - Long number to look for
        Returns:
        index on success, -1 otherwise
      • addLong

        public int addLong​(long n)
        Add a new long constant to the ConstantPool, if it is not already in there.
        Parameters:
        n - Long number to add
        Returns:
        index of entry
      • lookupDouble

        public int lookupDouble​(double n)
        Look for ConstantDouble in ConstantPool.
        Parameters:
        n - Double number to look for
        Returns:
        index on success, -1 otherwise
      • addDouble

        public int addDouble​(double n)
        Add a new double constant to the ConstantPool, if it is not already in there.
        Parameters:
        n - Double number to add
        Returns:
        index of entry
      • lookupNameAndType

        public int lookupNameAndType​(java.lang.String name,
                                     java.lang.String signature)
        Look for ConstantNameAndType in ConstantPool.
        Parameters:
        name - of variable/method
        signature - of variable/method
        Returns:
        index on success, -1 otherwise
      • addNameAndType

        public int addNameAndType​(java.lang.String name,
                                  java.lang.String signature)
        Add a new NameAndType constant to the ConstantPool if it is not already in there.
        Parameters:
        name - Name string to add
        signature - signature string to add
        Returns:
        index of entry
      • lookupMethodref

        public int lookupMethodref​(java.lang.String class_name,
                                   java.lang.String method_name,
                                   java.lang.String signature)
        Look for ConstantMethodref in ConstantPool.
        Parameters:
        class_name - Where to find method
        method_name - Guess what
        signature - return and argument types
        Returns:
        index on success, -1 otherwise
      • lookupMethodref

        public int lookupMethodref​(MethodGen method)
      • addMethodref

        public int addMethodref​(java.lang.String class_name,
                                java.lang.String method_name,
                                java.lang.String signature)
        Add a new Methodref constant to the ConstantPool, if it is not already in there.
        Parameters:
        class_name - class name string to add
        method_name - method name string to add
        signature - method signature string to add
        Returns:
        index of entry
      • addMethodref

        public int addMethodref​(MethodGen method)
      • lookupInterfaceMethodref

        public int lookupInterfaceMethodref​(java.lang.String class_name,
                                            java.lang.String method_name,
                                            java.lang.String signature)
        Look for ConstantInterfaceMethodref in ConstantPool.
        Parameters:
        class_name - Where to find method
        method_name - Guess what
        signature - return and argument types
        Returns:
        index on success, -1 otherwise
      • lookupInterfaceMethodref

        public int lookupInterfaceMethodref​(MethodGen method)
      • addInterfaceMethodref

        public int addInterfaceMethodref​(java.lang.String class_name,
                                         java.lang.String method_name,
                                         java.lang.String signature)
        Add a new InterfaceMethodref constant to the ConstantPool, if it is not already in there.
        Parameters:
        class_name - class name string to add
        method_name - method name string to add
        signature - signature string to add
        Returns:
        index of entry
      • addInterfaceMethodref

        public int addInterfaceMethodref​(MethodGen method)
      • lookupFieldref

        public int lookupFieldref​(java.lang.String class_name,
                                  java.lang.String field_name,
                                  java.lang.String signature)
        Look for ConstantFieldref in ConstantPool.
        Parameters:
        class_name - Where to find method
        field_name - Guess what
        signature - return and argument types
        Returns:
        index on success, -1 otherwise
      • addFieldref

        public int addFieldref​(java.lang.String class_name,
                               java.lang.String field_name,
                               java.lang.String signature)
        Add a new Fieldref constant to the ConstantPool, if it is not already in there.
        Parameters:
        class_name - class name string to add
        field_name - field name string to add
        signature - signature string to add
        Returns:
        index of entry
      • getConstant

        public Constant getConstant​(int i)
        Parameters:
        i - index in constant pool
        Returns:
        constant pool entry at index i
      • setConstant

        public void setConstant​(int i,
                                Constant c)
        Use with care!
        Parameters:
        i - index in constant pool
        c - new constant pool entry at index i
      • getConstantPool

        public ConstantPool getConstantPool()
        Returns:
        intermediate constant pool
      • getSize

        public int getSize()
        Returns:
        current size of constant pool
      • getFinalConstantPool

        public ConstantPool getFinalConstantPool()
        Returns:
        constant pool with proper length
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        Returns:
        String representation.
      • addConstant

        public int addConstant​(Constant c,
                               ConstantPoolGen cp)
        Import constant from another ConstantPool and return new index.