com.ibm.wala.shrikeBT
Class MethodData

java.lang.Object
  extended by com.ibm.wala.shrikeBT.MethodData

public final class MethodData
extends java.lang.Object

This class is a container for a bunch of information that we might know about a method. It's here for convenience so users can just pass one MethodData around instead of passing around an array of instructions, an array of exception handler lists, etc. It also provides a place to hang annotations. We provide a table mapping abstract "keys" to annotation objects. We also provide an invalidation protocol so that the annotation objects can be notified of code changes and react appropriately. This is useful for caching analysis results for a method.


Nested Class Summary
static interface MethodData.Results
          Annotation objects implement this Results interface.
 
Constructor Summary
MethodData(Decoder d, int access, java.lang.String classType, java.lang.String name, java.lang.String signature)
          Gather the information for a method after it has been decoded.
MethodData(int access, java.lang.String classType, java.lang.String name, java.lang.String signature, Instruction[] instructions, ExceptionHandler[][] handlers, int[] instructionsToBytecodes)
          Gather the information for a method "from scratch".
 
Method Summary
 int getAccess()
          Xiangyu,
 java.lang.String getClassType()
           
 ExceptionHandler[][] getHandlers()
           
 boolean getHasChanged()
           
 MethodData.Results getInfo(java.lang.Object key)
          Get the annotation for the given key.
 Instruction[] getInstructions()
           
 int[] getInstructionsToBytecodes()
           
 boolean getIsStatic()
           
 boolean getIsSynchronized()
           
 java.lang.String getName()
           
 java.lang.String getSignature()
           
 void putInfo(java.lang.Object key, MethodData.Results value)
          Set the annotation for the given key.
 void setHasChanged()
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

MethodData

public MethodData(int access,
                  java.lang.String classType,
                  java.lang.String name,
                  java.lang.String signature,
                  Instruction[] instructions,
                  ExceptionHandler[][] handlers,
                  int[] instructionsToBytecodes)
Gather the information for a method "from scratch".

Parameters:
access - the access flags
classType - the class in which the method is defined, in JVM type format (e.g., Ljava/lang/Object;)
name - the method name
signature - the method signature, in JVM type format (e.g., (ILjava/lang/Object;)V)
instructions - the instructions making up the method
handlers - a list of exception handlers for each instruction
instructionsToBytecodes - a map stating, for each instruction, the offset of the original bytecode instruction(s) giving rise to this instruction

MethodData

public MethodData(Decoder d,
                  int access,
                  java.lang.String classType,
                  java.lang.String name,
                  java.lang.String signature)
           throws java.lang.NullPointerException
Gather the information for a method after it has been decoded.

Parameters:
d - the decoder which has decoded the method
access - the access flags
classType - the class in which the method is defined, in JVM type format (e.g., Ljava/lang/Object;)
name - the method name
signature - the method signature, in JVM type format (e.g., (ILjava/lang/Object;)V)
Throws:
java.lang.NullPointerException - if d is null
Method Detail

setHasChanged

public void setHasChanged()

getSignature

public java.lang.String getSignature()
Returns:
the method signature, in JVM format

getName

public java.lang.String getName()
Returns:
the method name

getAccess

public int getAccess()
Xiangyu,

Returns:
the method access

getClassType

public java.lang.String getClassType()
Returns:
the JVM type for the class defining the method (e.g., Ljava/lang/Object;)

getIsStatic

public boolean getIsStatic()
Returns:
whether or not the method is static

getIsSynchronized

public boolean getIsSynchronized()
Returns:
whether or not the method is synchronized

getHandlers

public ExceptionHandler[][] getHandlers()
Returns:
the exception handler lists

getInstructions

public Instruction[] getInstructions()
Returns:
the instruction array

getInstructionsToBytecodes

public int[] getInstructionsToBytecodes()
Returns:
the map from instructions to bytecode offsets

getInfo

public MethodData.Results getInfo(java.lang.Object key)
Get the annotation for the given key.

Returns:
the annotation or null if there isn't one

putInfo

public void putInfo(java.lang.Object key,
                    MethodData.Results value)
Set the annotation for the given key.


getHasChanged

public boolean getHasChanged()
Returns:
true iff the code has been updated at least once

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object