Package 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.- See Also:
CFG
,TypeAnalysis
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
PruneInfeasibleExceptionEdges.MarkedEdge
A memento to remind us of how we classified a particular exception edge.
-
Field Summary
Fields Modifier and Type Field Description private CFG
cfg
private boolean
cfgModified
private static boolean
DEBUG
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
Constructors Constructor Description PruneInfeasibleExceptionEdges(CFG cfg, org.apache.bcel.generic.MethodGen methodGen, TypeDataflow typeDataflow)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
execute()
Prune infeasible exception edges from the CFG.boolean
wasCFGModified()
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
-
STATS
private static final boolean STATS
-
numEdgesPruned
private static int numEdgesPruned
-
cfg
private final CFG cfg
-
typeDataflow
private final TypeDataflow typeDataflow
-
cfgModified
private boolean cfgModified
-
-
Constructor Detail
-
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
-
-
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
-
wasCFGModified
public boolean wasCFGModified()
- Returns:
- true if modified
-
-