edu.umd.cs.findbugs.ba
Class PruneInfeasibleExceptionEdges
java.lang.Object
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
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 |
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 |
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
PruneInfeasibleExceptionEdges
public PruneInfeasibleExceptionEdges(CFG cfg,
org.apache.bcel.generic.MethodGen methodGen,
TypeDataflow typeDataflow)
- Constructor.
- Parameters:
cfg
- the CFG to prunemethodGen
- the methodtypeDataflow
- initialized TypeDataflow object for the CFG,
indicating the types of all stack locations
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