org.apache.bcel.classfile

## Class Code

- java.lang.Object
- - org.apache.bcel.classfile.Attribute
  - - org.apache.bcel.classfile.Code

- All Implemented Interfaces:
    Cloneable, Node

      public final class Code
      extends Attribute

  This class represents a chunk of Java byte code contained in a method. It is instantiated by the Attribute.readAttribute() method. A Code attribute contains informations about operand stack, local variables, byte code and the exceptions handled within this method. This attribute has attributes itself, namely LineNumberTable which is used for debugging purposes and LocalVariableTable which contains information about the local variables.

       Code_attribute {
         u2 attribute_name_index;
         u4 attribute_length;
         u2 max_stack;
         u2 max_locals;
         u4 code_length;
         u1 code[code_length];
         u2 exception_table_length;
         {
           u2 start_pc;
           u2 end_pc;
           u2 handler_pc;
           u2 catch_type;
         } exception_table[exception_table_length];
         u2 attributes_count;
         attribute_info attributes[attributes_count];
       }

  See Also:
    `Attribute`, `CodeException`, `LineNumberTable`, `LocalVariableTable`

- - ### Field Summary

    - ### Fields inherited from class org.apache.bcel.classfile.Attribute

      `constant_pool, EMPTY_ARRAY, length, name_index, tag`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Code(Code code)` Initialize from another object.
    `Code(int nameIndex, int length, int maxStack, int maxLocals, byte[] code, CodeException[] exceptionTable, Attribute[] attributes, ConstantPool constantPool)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `accept(Visitor v)` Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class.
    `Attribute` | `copy(ConstantPool constantPool)`
    `void` | `dump(DataOutputStream file)` Dump code attribute to file stream in binary format.
    `Attribute[]` | `getAttributes()`
    `byte[]` | `getCode()`
    `CodeException[]` | `getExceptionTable()`
    `LineNumberTable` | `getLineNumberTable()`
    `LocalVariableTable` | `getLocalVariableTable()`
    `int` | `getMaxLocals()`
    `int` | `getMaxStack()`
    `void` | `setAttributes(Attribute[] attributes)`
    `void` | `setCode(byte[] code)`
    `void` | `setExceptionTable(CodeException[] exceptionTable)`
    `void` | `setMaxLocals(int maxLocals)`
    `void` | `setMaxStack(int maxStack)`
    `String` | `toString()`
    `String` | `toString(boolean verbose)` Converts this object to a String.

    - ### Methods inherited from class org.apache.bcel.classfile.Attribute

      `addAttributeReader, addAttributeReader, clone, getConstantPool, getLength, getName, getNameIndex, getTag, println, readAttribute, readAttribute, removeAttributeReader, setConstantPool, setLength, setNameIndex`

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### Code

          public Code(Code code)

      Initialize from another object. Note that both objects use the same references (shallow copy). Use copy() for a physical copy.
      Parameters:
        `code` - The source Code.

    - #### Code

          public Code(int nameIndex,
                      int length,
                      int maxStack,
                      int maxLocals,
                      byte[] code,
                      CodeException[] exceptionTable,
                      Attribute[] attributes,
                      ConstantPool constantPool)

      Parameters:
        `nameIndex` - Index pointing to the name Code
        `length` - Content length in bytes
        `maxStack` - Maximum size of stack
        `maxLocals` - Number of local variables
        `code` - Actual byte code
        `exceptionTable` - of handled exceptions
        `attributes` - Attributes of code: LineNumber or LocalVariable
        `constantPool` - Array of constants

  - ### Method Detail

    - #### accept

          public void accept(Visitor v)

      Called by objects that are traversing the nodes of the tree implicitly 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`
      Specified by:
        `accept` in class `Attribute`
      Parameters:
        `v` - Visitor object

    - #### copy

          public Attribute copy(ConstantPool constantPool)

      Specified by:
        `copy` in class `Attribute`
      Parameters:
        `constantPool` - the constant pool to duplicate
      Returns:
        deep copy of this attribute

    - #### dump

          public void dump(DataOutputStream file)
                    throws IOException

      Dump code attribute to file stream in binary format.
      Overrides:
        `dump` in class `Attribute`
      Parameters:
        `file` - Output file stream
      Throws:
        `IOException` - if an I/O error occurs.

    - #### getAttributes

          public Attribute[] getAttributes()

      Returns:
        Collection of code attributes.
      See Also:
        `Attribute`

    - #### getCode

          public byte[] getCode()

      Returns:
        Actual byte code of the method.

    - #### getExceptionTable

          public CodeException[] getExceptionTable()

      Returns:
        Table of handled exceptions.
      See Also:
        `CodeException`

    - #### getLineNumberTable

          public LineNumberTable getLineNumberTable()

      Returns:
        LineNumberTable of Code, if it has one

    - #### getLocalVariableTable

          public LocalVariableTable getLocalVariableTable()

      Returns:
        LocalVariableTable of Code, if it has one

    - #### getMaxLocals

          public int getMaxLocals()

      Returns:
        Number of local variables.

    - #### getMaxStack

          public int getMaxStack()

      Returns:
        Maximum size of stack used by this method.

    - #### setAttributes

          public void setAttributes(Attribute[] attributes)

      Parameters:
        `attributes` - the attributes to set for this Code

    - #### setCode

          public void setCode(byte[] code)

      Parameters:
        `code` - byte code

    - #### setExceptionTable

          public void setExceptionTable(CodeException[] exceptionTable)

      Parameters:
        `exceptionTable` - exception table

    - #### setMaxLocals

          public void setMaxLocals(int maxLocals)

      Parameters:
        `maxLocals` - maximum number of local variables

    - #### setMaxStack

          public void setMaxStack(int maxStack)

      Parameters:
        `maxStack` - maximum stack size

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Attribute`
      Returns:
        String representation of code chunk.

    - #### toString

          public String toString(boolean verbose)

      Converts this object to a String.
      Parameters:
        `verbose` - Provides verbose output when true.
      Returns:
        String representation of code chunk.

Copyright © 2004–2022 The Apache Software Foundation. All rights reserved.