Class MethodData

java.lang.Object
com.ibm.wala.shrike.shrikeBT.MethodData

public final class MethodData extends 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.

  • Constructor Details

    • MethodData

      public MethodData(int access, String classType, String name, String signature, IInstruction[] 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, String classType, String name, String signature) throws 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:
      NullPointerException - if d is null
  • Method Details

    • makeWithDefaultHandlersAndInstToBytecodes

      public static MethodData makeWithDefaultHandlersAndInstToBytecodes(int access, String classType, String name, String signature, IInstruction[] instructions)
      Create information for a method, with no exception handlers and a dummy mapping of instructions to original bytecodes.
      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
    • setHasChanged

      public void setHasChanged()
    • getSignature

      public String getSignature()
      Returns:
      the method signature, in JVM format
    • getName

      public String getName()
      Returns:
      the method name
    • getAccess

      public int getAccess()
      Returns:
      the method access flags
    • getClassType

      public 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 IInstruction[] getInstructions()
      Returns:
      the instruction array
    • getInstructionsToBytecodes

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

      public MethodData.Results getInfo(Object key)
      Get the annotation for the given key.
      Returns:
      the annotation or null if there isn't one
    • putInfo

      public void putInfo(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 String toString()
      Overrides:
      toString in class Object