|
|||||||||
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 forMethod Detail |
---|
public void build() throws CFGBuilderException
CFGBuilder
build
in interface CFGBuilder
CFGBuilderException
public 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 |