org.apache.jdo.impl.enhancer.classfile
Class CodeAttribute

java.lang.Object
  extended byorg.apache.jdo.impl.enhancer.classfile.ClassAttribute
      extended byorg.apache.jdo.impl.enhancer.classfile.CodeAttribute
All Implemented Interfaces:
VMConstants

public class CodeAttribute
extends ClassAttribute

Subtype of ClassAttribute which describes the "Code" attribute associated with a method.


Field Summary
private  AttributeVector codeAttributes
           
(package private)  CodeEnv codeEnv
           
private  ExceptionTable exceptionTable
           
static java.lang.String expectedAttrName
           
private  int maxLocals
           
private  int maxStack
           
private  Insn theCode
           
private  byte[] theCodeBytes
           
private  byte[] theDataBytes
           
 
Fields inherited from class org.apache.jdo.impl.enhancer.classfile.ClassAttribute
 
Fields inherited from interface org.apache.jdo.impl.enhancer.classfile.VMConstants
ACCAbstract, ACCAnnotation, ACCBridge, ACCEnum, ACCFinal, ACCInterface, ACCNative, ACCPrivate, ACCProtected, ACCPublic, ACCStatic, ACCStrict, ACCSuper, ACCSynchronized, ACCSynthetic, ACCTransient, ACCVarargs, ACCVolatile, CONSTANTClass, CONSTANTDouble, CONSTANTFieldRef, CONSTANTFloat, CONSTANTInteger, CONSTANTInterfaceMethodRef, CONSTANTLong, CONSTANTMethodRef, CONSTANTNameAndType, CONSTANTString, CONSTANTUnicode, CONSTANTUtf8, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokedynamic, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, T_TWOWORD, T_UNKNOWN, T_WORD, TC_INTERFACE, TC_OBJECT, TC_STRING
 
Constructor Summary
CodeAttribute(ConstUtf8 attrName, byte[] dataBytes, CodeEnv codeEnv)
          Constructs a CodeAttribute object for later disassembly
CodeAttribute(ConstUtf8 attrName, int maxStack, int maxLocals, Insn code, byte[] codeBytes, ExceptionTable excTable, AttributeVector codeAttrs, CodeEnv codeEnv)
          Constructs a CodeAttribute object
CodeAttribute(ConstUtf8 attrName, int maxStack, int maxLocals, Insn code, ExceptionTable excTable, AttributeVector codeAttrs)
          Constructs a CodeAttribute object for construction from scratch
 
Method Summary
 AttributeVector attributes()
          Return the attributes which apply to this code
private  void buildInstructionBytes()
          Derive the instruction byte codes from the instruction list This should also recompute stack and variables but for now we assume that this isn't needed
private  void buildInstructions(CodeEnv codeEnv)
          Derive the instruction list from the instruction byte codes
 byte[] byteCodes()
          Return the java VM byte code sequence for this method - null for native and abstract methods
(package private)  int codeSize()
           
 ExceptionTable exceptionHandlers()
          Return the exception ranges and handlers which apply to the code in this method.
 boolean isEqual(java.util.Stack msg, java.lang.Object obj)
          Compares this instance with another for structural equality.
 int localsUsed()
          Return the maximum number of local variables used by this method
private  void makeValid()
          If theDataBytes is non-null, disassemble this code attribute from the data bytes.
(package private)  void print(java.io.PrintStream out, int indent)
          Print a description of the attribute to the print stream
(package private) static CodeAttribute read(ConstUtf8 attrName, java.io.DataInputStream data, ConstantPool pool)
           
(package private) static CodeAttribute read(ConstUtf8 attrName, int attrLength, java.io.DataInputStream data, ConstantPool pool)
           
private  int resolveOffsets()
          Assign offsets to instructions and return the number of bytes.
 void setLocalsUsed(int used)
          Set the maximum number of local variables used by this method
 void setStackUsed(int used)
          Set the maximum number of stack entries used by this method
 void setTheCode(Insn insn)
          Install the instruction sequence for this method - the byte code array is later updated.
 int stackUsed()
          Return the maximum number of stack entries used by this method
 Insn theCode()
          Return the instruction sequence for this method - initially derived from the byte code array, but may later be modified
(package private)  void write(java.io.DataOutputStream out)
          Write the attribute to the output stream
 
Methods inherited from class org.apache.jdo.impl.enhancer.classfile.ClassAttribute
attrName, read, read
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

expectedAttrName

public static final java.lang.String expectedAttrName
See Also:
Constant Field Values

theDataBytes

private byte[] theDataBytes

maxStack

private int maxStack

maxLocals

private int maxLocals

theCodeBytes

private byte[] theCodeBytes

theCode

private Insn theCode

exceptionTable

private ExceptionTable exceptionTable

codeAttributes

private AttributeVector codeAttributes

codeEnv

CodeEnv codeEnv
Constructor Detail

CodeAttribute

public CodeAttribute(ConstUtf8 attrName,
                     int maxStack,
                     int maxLocals,
                     Insn code,
                     ExceptionTable excTable,
                     AttributeVector codeAttrs)
Constructs a CodeAttribute object for construction from scratch


CodeAttribute

public CodeAttribute(ConstUtf8 attrName,
                     int maxStack,
                     int maxLocals,
                     Insn code,
                     byte[] codeBytes,
                     ExceptionTable excTable,
                     AttributeVector codeAttrs,
                     CodeEnv codeEnv)
Constructs a CodeAttribute object


CodeAttribute

public CodeAttribute(ConstUtf8 attrName,
                     byte[] dataBytes,
                     CodeEnv codeEnv)
Constructs a CodeAttribute object for later disassembly

Method Detail

stackUsed

public int stackUsed()
Return the maximum number of stack entries used by this method


setStackUsed

public void setStackUsed(int used)
Set the maximum number of stack entries used by this method


localsUsed

public int localsUsed()
Return the maximum number of local variables used by this method


setLocalsUsed

public void setLocalsUsed(int used)
Set the maximum number of local variables used by this method


byteCodes

public byte[] byteCodes()
Return the java VM byte code sequence for this method - null for native and abstract methods


theCode

public Insn theCode()
Return the instruction sequence for this method - initially derived from the byte code array, but may later be modified


setTheCode

public void setTheCode(Insn insn)
Install the instruction sequence for this method - the byte code array is later updated.


exceptionHandlers

public ExceptionTable exceptionHandlers()
Return the exception ranges and handlers which apply to the code in this method.


attributes

public AttributeVector attributes()
Return the attributes which apply to this code


isEqual

public boolean isEqual(java.util.Stack msg,
                       java.lang.Object obj)
Compares this instance with another for structural equality.

Overrides:
isEqual in class ClassAttribute

read

static CodeAttribute read(ConstUtf8 attrName,
                          java.io.DataInputStream data,
                          ConstantPool pool)
                   throws java.io.IOException
Throws:
java.io.IOException

read

static CodeAttribute read(ConstUtf8 attrName,
                          int attrLength,
                          java.io.DataInputStream data,
                          ConstantPool pool)
                   throws java.io.IOException
Throws:
java.io.IOException

write

void write(java.io.DataOutputStream out)
     throws java.io.IOException
Description copied from class: ClassAttribute
Write the attribute to the output stream

Specified by:
write in class ClassAttribute
Throws:
java.io.IOException

print

void print(java.io.PrintStream out,
           int indent)
Description copied from class: ClassAttribute
Print a description of the attribute to the print stream

Specified by:
print in class ClassAttribute

resolveOffsets

private int resolveOffsets()
Assign offsets to instructions and return the number of bytes. theCode must be non-null.


codeSize

int codeSize()

buildInstructions

private void buildInstructions(CodeEnv codeEnv)
Derive the instruction list from the instruction byte codes


buildInstructionBytes

private void buildInstructionBytes()
Derive the instruction byte codes from the instruction list This should also recompute stack and variables but for now we assume that this isn't needed


makeValid

private void makeValid()
If theDataBytes is non-null, disassemble this code attribute from the data bytes.