edu.umd.cs.findbugs.ba
Class PruneInfeasibleExceptionEdges

java.lang.Object
  extended by edu.umd.cs.findbugs.ba.PruneInfeasibleExceptionEdges
All Implemented Interfaces:
EdgeTypes

public class PruneInfeasibleExceptionEdges
extends java.lang.Object
implements EdgeTypes

Prune a CFG to remove infeasible exception edges. In order to determine what kinds of exceptions can be thrown by explicit ATHROW instructions, type analysis must first be performed on the unpruned CFG.

Author:
David Hovemeyer
See Also:
CFG, TypeAnalysis

Nested Class Summary
private static class PruneInfeasibleExceptionEdges.MarkedEdge
          A momento to remind us of how we classified a particular exception edge.
 
Field Summary
private  CFG cfg
           
private static boolean DEBUG
           
private  org.apache.bcel.generic.MethodGen methodGen
           
private static int numEdgesPruned
           
private static boolean STATS
           
private  TypeDataflow typeDataflow
           
 
Fields inherited from interface edu.umd.cs.findbugs.ba.EdgeTypes
BACKEDGE_SOURCE_EDGE, BACKEDGE_TARGET_EDGE, CHECKED_EXCEPTIONS_FLAG, EXIT_EDGE, EXPLICIT_EXCEPTIONS_FLAG, FALL_THROUGH_EDGE, GOTO_EDGE, HANDLED_EXCEPTION_EDGE, IFCMP_EDGE, JSR_EDGE, RET_EDGE, RETURN_EDGE, START_EDGE, SWITCH_DEFAULT_EDGE, SWITCH_EDGE, UNHANDLED_EXCEPTION_EDGE, UNKNOWN_EDGE
 
Constructor Summary
PruneInfeasibleExceptionEdges(CFG cfg, org.apache.bcel.generic.MethodGen methodGen, TypeDataflow typeDataflow)
          Constructor.
 
Method Summary
 void execute()
          Prune infeasible exception edges from the CFG.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

private static final boolean DEBUG

STATS

private static final boolean STATS

numEdgesPruned

private static int numEdgesPruned

cfg

private CFG cfg

methodGen

private org.apache.bcel.generic.MethodGen methodGen

typeDataflow

private TypeDataflow typeDataflow
Constructor Detail

PruneInfeasibleExceptionEdges

public PruneInfeasibleExceptionEdges(CFG cfg,
                                     org.apache.bcel.generic.MethodGen methodGen,
                                     TypeDataflow typeDataflow)
Constructor.

Parameters:
cfg - the CFG to prune
methodGen - the method
typeDataflow - initialized TypeDataflow object for the CFG, indicating the types of all stack locations
Method Detail

execute

public void execute()
             throws java.lang.ClassNotFoundException
Prune infeasible exception edges from the CFG. If the method returns normally, then the operation was successful, and the CFG should no longer contain infeasible exception edges. If ClassNotFoundException or DataflowAnalysisException are thrown, then the operation was unsuccessful, but the CFG is still valid because it was not modified. If a runtime exception is thrown, then the CFG may be partially modified and should be considered invalid.

Throws:
java.lang.ClassNotFoundException