JML

org.multijava.util.optimize
Class InstructionHandle

java.lang.Object
  extended byorg.multijava.util.classfile.AbstractInstructionAccessor
      extended byorg.multijava.util.optimize.InstructionHandle
All Implemented Interfaces:
Constants, InstructionAccessor

public class InstructionHandle
extends AbstractInstructionAccessor
implements Constants


Field Summary
private  ArrayList accessors
           
private  Instruction insn
           
private  ArrayList lineNumbers
           
private  InstructionHandle next
           
private  InstructionHandle prev
           
private  boolean reached
           
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, 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_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_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_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_ldc2_w, opc_ldc_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, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
InstructionHandle(Instruction insn, InstructionHandle prev)
          Creates a new instruction handle.
 
Method Summary
 void addAccessor(AccessorContainer accessor)
           
 void addLineNumberInfo(ArrayList lineNumberInfo)
          Adds line number info stored for the instruction to the specified vector.
 void attachTo(AccessorContainer container)
          Notifies this handle that is has been attached to the specified container.
private  void changeTarget(AccessorContainer container, InstructionHandle target)
           
 void clean()
          reset
 void destroy()
          destroy
 AccessorContainer getAccessor(int i)
           
 Instruction getInstruction()
          Returns the enclosed instruction.
 JumpInstruction getJump()
          Returns the instruction as a Jump instruction
 LocalVarInstruction getLocal()
          Returns the instruction as a Jump instruction
 InstructionHandle getNext()
          Returns the handle of the next instruction in textual order.
 int getOpcode()
          Returns the target of this jump instruction
 InstructionHandle getPrevious()
          Returns the handle of the next instruction in textual order.
 InstructionHandle getTarget()
          Returns the target of this jump instruction
 boolean isJump()
          Returns true if this instruction is a jump instruction
 boolean isReached()
          isReached
 boolean isTarget()
          isTarget
private  void notifyTargetOnAdd()
           
private  void notifyTargetOnRemove()
           
 boolean remove()
          destroy
 void removeAccessor(AccessorContainer accessor)
           
 void removeAccessors()
           
 void replaceBy(Instruction insn)
          replaceBy
 void replaceBy(Instruction[] insns)
          replaceBy
 void reset()
          reset
 void set()
          isReached
 void setNext(InstructionHandle next)
          Sets the handle of the next instruction in textual order.
 void setTarget(InstructionHandle target)
          Returns the target of this jump instruction
 
Methods inherited from class org.multijava.util.classfile.AbstractInstructionAccessor
transform
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

insn

private Instruction insn

reached

private boolean reached

prev

private InstructionHandle prev

next

private InstructionHandle next

lineNumbers

private ArrayList lineNumbers

accessors

private ArrayList accessors
Constructor Detail

InstructionHandle

public InstructionHandle(Instruction insn,
                         InstructionHandle prev)
Creates a new instruction handle.

Parameters:
insn - the instruction
prev - the handle of the next instruction in textual order
Method Detail

attachTo

public void attachTo(AccessorContainer container)
Notifies this handle that is has been attached to the specified container.


addLineNumberInfo

public void addLineNumberInfo(ArrayList lineNumberInfo)
Adds line number info stored for the instruction to the specified vector.


getInstruction

public Instruction getInstruction()
Returns the enclosed instruction.


getNext

public InstructionHandle getNext()
Returns the handle of the next instruction in textual order.


getPrevious

public InstructionHandle getPrevious()
Returns the handle of the next instruction in textual order.


isJump

public boolean isJump()
Returns true if this instruction is a jump instruction


getJump

public JumpInstruction getJump()
Returns the instruction as a Jump instruction


getLocal

public LocalVarInstruction getLocal()
Returns the instruction as a Jump instruction


getTarget

public InstructionHandle getTarget()
Returns the target of this jump instruction


setTarget

public void setTarget(InstructionHandle target)
Returns the target of this jump instruction


getOpcode

public int getOpcode()
Returns the target of this jump instruction


setNext

public void setNext(InstructionHandle next)
Sets the handle of the next instruction in textual order.


isReached

public boolean isReached()
isReached


isTarget

public boolean isTarget()
isTarget


set

public void set()
isReached


destroy

public void destroy()
destroy


remove

public boolean remove()
destroy


reset

public void reset()
reset


clean

public void clean()
reset


replaceBy

public void replaceBy(Instruction insn)
replaceBy


replaceBy

public void replaceBy(Instruction[] insns)
replaceBy


addAccessor

public void addAccessor(AccessorContainer accessor)

getAccessor

public AccessorContainer getAccessor(int i)

removeAccessor

public void removeAccessor(AccessorContainer accessor)

removeAccessors

public void removeAccessors()

notifyTargetOnRemove

private void notifyTargetOnRemove()

notifyTargetOnAdd

private void notifyTargetOnAdd()

changeTarget

private void changeTarget(AccessorContainer container,
                          InstructionHandle target)

JML

JML is Copyright (C) 1998-2002 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.