|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectedu.umd.cs.findbugs.ba.BetterCFGBuilder2
public class BetterCFGBuilder2
A CFGBuilder that really tries to construct accurate control flow graphs. The CFGs it creates have accurate exception edges, and have accurately inlined JSR subroutines.
CFG| Nested Class Summary | |
|---|---|
private static class |
BetterCFGBuilder2.Context
Inlining context. |
private static class |
BetterCFGBuilder2.EscapeTarget
A placeholder for a control edge that escapes its subroutine to return control back to an outer (calling) subroutine. |
private class |
BetterCFGBuilder2.Subroutine
JSR subroutine. |
private static class |
BetterCFGBuilder2.WorkListItem
A work list item for creating the CFG for a subroutine. |
| Field Summary | |
|---|---|
private CFG |
cfg
|
private org.apache.bcel.generic.ConstantPoolGen |
cpg
|
private static boolean |
DEBUG
|
private static java.util.LinkedList<BetterCFGBuilder2.EscapeTarget> |
emptyEscapeTargetList
|
private ExceptionHandlerMap |
exceptionHandlerMap
|
private java.util.IdentityHashMap<org.apache.bcel.generic.InstructionHandle,BetterCFGBuilder2.Subroutine> |
jsrSubroutineMap
|
private org.apache.bcel.generic.MethodGen |
methodGen
|
private static boolean |
NO_LOAD_CONSTANT_EXCEPTIONS
|
private static boolean |
NO_STATIC_FIELD_EXCEPTIONS
|
private java.util.LinkedList<BetterCFGBuilder2.Subroutine> |
subroutineWorkList
|
private BetterCFGBuilder2.Subroutine |
topLevelSubroutine
|
private java.util.BitSet |
usedInstructionSet
|
| 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 |
| Fields inherited from interface edu.umd.cs.findbugs.ba.Debug |
|---|
CHECK_ASSERTIONS, VERIFY_INTEGRITY |
| Constructor Summary | |
|---|---|
BetterCFGBuilder2(org.apache.bcel.generic.MethodGen methodGen)
Constructor. |
|
| Method Summary | |
|---|---|
void |
build()
Build the CFG. |
private void |
build(BetterCFGBuilder2.Subroutine subroutine)
Build a subroutine. |
CFG |
getCFG()
Get the CFG built by this object. |
private void |
handleExceptions(BetterCFGBuilder2.Subroutine subroutine,
org.apache.bcel.generic.InstructionHandle pei,
BasicBlock etb)
Add exception edges for given instruction. |
void |
inline(BetterCFGBuilder2.Context context)
Inline a subroutine into a calling context. |
private CFG |
inlineAll()
Inline all JSR subroutines into the top-level subroutine. |
private static boolean |
isMerge(org.apache.bcel.generic.InstructionHandle handle)
Determine whether or not the given instruction is a control flow merge. |
private boolean |
isPEI(org.apache.bcel.generic.InstructionHandle handle)
Return whether or not the given instruction can throw exceptions. |
static void |
main(java.lang.String[] argv)
Test driver. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private static final boolean DEBUG
private static final boolean NO_STATIC_FIELD_EXCEPTIONS
private static final boolean NO_LOAD_CONSTANT_EXCEPTIONS
private static final java.util.LinkedList<BetterCFGBuilder2.EscapeTarget> emptyEscapeTargetList
private org.apache.bcel.generic.MethodGen methodGen
private org.apache.bcel.generic.ConstantPoolGen cpg
private ExceptionHandlerMap exceptionHandlerMap
private java.util.BitSet usedInstructionSet
private java.util.LinkedList<BetterCFGBuilder2.Subroutine> subroutineWorkList
private java.util.IdentityHashMap<org.apache.bcel.generic.InstructionHandle,BetterCFGBuilder2.Subroutine> jsrSubroutineMap
private BetterCFGBuilder2.Subroutine topLevelSubroutine
private CFG cfg
| Constructor Detail |
|---|
public BetterCFGBuilder2(org.apache.bcel.generic.MethodGen methodGen)
methodGen - the method to build a CFG for| Method Detail |
|---|
public void build()
throws CFGBuilderException
CFGBuilder
build in interface CFGBuilderCFGBuilderExceptionpublic CFG getCFG()
CFGBuilder
getCFG in interface CFGBuilder
private void build(BetterCFGBuilder2.Subroutine subroutine)
throws CFGBuilderException
subroutine - the subroutine
CFGBuilderException
private void handleExceptions(BetterCFGBuilder2.Subroutine subroutine,
org.apache.bcel.generic.InstructionHandle pei,
BasicBlock etb)
subroutine - the subroutine containing the instructionpei - the instruction which throws an exceptionetb - the exception thrower block (ETB) for the instructionprivate boolean isPEI(org.apache.bcel.generic.InstructionHandle handle)
handle - the instruction
private static boolean isMerge(org.apache.bcel.generic.InstructionHandle handle)
handle - the instruction
private CFG inlineAll()
throws CFGBuilderException
CFGBuilderException
public void inline(BetterCFGBuilder2.Context context)
throws CFGBuilderException
context - the Context
CFGBuilderException
public static void main(java.lang.String[] argv)
throws java.lang.Exception
java.lang.Exception
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||