at.dms.classfile
Class InvokeinterfaceInstruction

java.lang.Object
  |
  +--at.dms.classfile.AbstractInstructionAccessor
        |
        +--at.dms.classfile.Instruction
              |
              +--at.dms.classfile.InvokeinterfaceInstruction
All Implemented Interfaces:
Constants, InstructionAccessor

public class InvokeinterfaceInstruction
extends Instruction

Some instructions are perniticky enough that its simpler to write them separately instead of smushing them with all the rest. the invokeinterface instruction is one of them.


Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_NBR_FLAGS, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_EXCEPTIONS, ATT_GENERIC, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_SOURCEFILE, ATT_SYNTHETIC, 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_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_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, 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
InvokeinterfaceInstruction(InterfaceConstant method, int nargs)
          Constructs a new invokeinterface instruction from a class file
InvokeinterfaceInstruction(java.lang.String name, java.lang.String type, int nargs)
          Constructs a new invokeinterface instruction
InvokeinterfaceInstruction(java.lang.String owner, java.lang.String name, java.lang.String type, int nargs)
          Constructs a new invokeinterface instruction
 
Method Summary
 boolean canComplete()
          Returns true iff control flow can reach the next instruction in textual order.
 InterfaceConstant getInterfaceConstant()
          Returns the interface constant value
 int getNbArgs()
          Returns the number of arguments
 int getPushedOnStack()
          Returns the size of data pushed on the stack by this instruction
 byte getReturnType()
          Returns the type pushed on the stack
(package private)  int getSize()
          Returns the number of bytes used by the the instruction in the code array.
 int getStack()
          Return the amount of stack (positive or negative) used by this instruction
(package private)  void resolveConstants(ConstantPool cp)
          Insert or check location of constant value on constant pool
(package private)  void write(ConstantPool cp, java.io.DataOutput out)
          Write this instruction into a file
 
Methods inherited from class at.dms.classfile.Instruction
check, computeEndAddress, dump, getAddress, getLocalVar, getOpcode, getPoppedFromStack, isLiteral, setAddress, setOpcode
 
Methods inherited from class at.dms.classfile.AbstractInstructionAccessor
transform
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InvokeinterfaceInstruction

public InvokeinterfaceInstruction(java.lang.String name,
                                  java.lang.String type,
                                  int nargs)
Constructs a new invokeinterface instruction
Parameters:
name - the qualified name of the method
type - the method signature
nargs - number of arguments

InvokeinterfaceInstruction

public InvokeinterfaceInstruction(java.lang.String owner,
                                  java.lang.String name,
                                  java.lang.String type,
                                  int nargs)
Constructs a new invokeinterface instruction
Parameters:
name - the qualified name of the method
type - the method signature
nargs - number of arguments

InvokeinterfaceInstruction

public InvokeinterfaceInstruction(InterfaceConstant method,
                                  int nargs)
Constructs a new invokeinterface instruction from a class file
Parameters:
method - the method reference (as pooled constant)
nargs - number of arguments
Method Detail

canComplete

public boolean canComplete()
Returns true iff control flow can reach the next instruction in textual order.
Overrides:
canComplete in class Instruction

getSize

int getSize()
Returns the number of bytes used by the the instruction in the code array.
Overrides:
getSize in class Instruction

getInterfaceConstant

public InterfaceConstant getInterfaceConstant()
Returns the interface constant value

getNbArgs

public int getNbArgs()
Returns the number of arguments

getReturnType

public byte getReturnType()
Returns the type pushed on the stack
Overrides:
getReturnType in class Instruction

getPushedOnStack

public int getPushedOnStack()
Returns the size of data pushed on the stack by this instruction
Overrides:
getPushedOnStack in class Instruction

getStack

public int getStack()
Return the amount of stack (positive or negative) used by this instruction
Overrides:
getStack in class Instruction

resolveConstants

void resolveConstants(ConstantPool cp)
Insert or check location of constant value on constant pool
Overrides:
resolveConstants in class Instruction
Parameters:
cp - the constant pool for this class

write

void write(ConstantPool cp,
           java.io.DataOutput out)
     throws java.io.IOException
Write this instruction into a file
Overrides:
write in class Instruction
Parameters:
cp - the constant pool that contain all data
out - the file where to write this object info
Throws:
java.io.IOException - an io problem has occured