soot.toolkits.exceptions
Class TrapTightener

java.lang.Object
  extended by soot.Transformer
      extended by soot.BodyTransformer
          extended by soot.toolkits.exceptions.TrapTightener

public final class TrapTightener
extends BodyTransformer

A BodyTransformer that shrinks the protected area covered by each Trap in the Body so that it begins at the first of the Body's Units which might throw an exception caught by the Trap and ends just after the last Unit which might throw an exception caught by the Trap. In the case where none of the Units protected by a Trap can throw the exception it catches, the Trap's protected area is left completely empty, which will likely cause the UnreachableCodeEliminator to remove the Trap completely. The TrapTightener is used to reduce the risk of unverifiable code which can result from the use of ExceptionalUnitGraphs from which unrealizable exceptional control flow edges have been removed.


Constructor Summary
TrapTightener(Singletons.Global g)
           
 
Method Summary
protected  void internalTransform(Body body, String phaseName, Map options)
          This method is called to perform the transformation itself.
protected  boolean mightThrowTo(ExceptionalUnitGraph g, Unit u, Trap t)
          A utility routine which determines if a particular Unit might throw an exception to a particular Trap, according to the information supplied by a particular control flow graph.
static TrapTightener v()
           
 
Methods inherited from class soot.BodyTransformer
transform, transform, transform
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TrapTightener

public TrapTightener(Singletons.Global g)
Method Detail

v

public static TrapTightener v()

internalTransform

protected void internalTransform(Body body,
                                 String phaseName,
                                 Map options)
Description copied from class: BodyTransformer
This method is called to perform the transformation itself. It is declared abstract; subclasses must implement this method by making it the entry point to their actual Body transformation.

Specified by:
internalTransform in class BodyTransformer
Parameters:
body - the body on which to apply the transformation
phaseName - the phasename for this transform; not typically used by implementations.
options - the actual computed options; a combination of default options and Scene specified options.

mightThrowTo

protected boolean mightThrowTo(ExceptionalUnitGraph g,
                               Unit u,
                               Trap t)
A utility routine which determines if a particular Unit might throw an exception to a particular Trap, according to the information supplied by a particular control flow graph.

Parameters:
g - The control flow graph providing information about exceptions.
u - The unit being inquired about.
t - The trap being inquired about.
Returns:
true if u might throw an exception caught by t, according to g