public class StringCFGVisualizer<A extends AbstractValue<A>,S extends Store<S>,T extends TransferFunction<A,S>> extends AbstractCFGVisualizer<A,S,T>
lineSeparator, storeEntryIndent, verbose| Constructor and Description | 
|---|
| StringCFGVisualizer() | 
| Modifier and Type | Method and Description | 
|---|---|
| protected String | addEdge(long sId,
       long eId,
       String flowRule)Generate the String representation of an edge. | 
| void | shutdown()Shutdown method called once from the shutdown hook of the  BaseTypeChecker. | 
| Map<String,Object> | visualize(ControlFlowGraph cfg,
         Block entry,
         @Nullable Analysis<A,S,T> analysis)Output a visualization representing the control flow graph starting at  entry. | 
| String | visualizeBlock(Block bb,
              @Nullable Analysis<A,S,T> analysis)Visualize a block based on the analysis. | 
| String | visualizeBlockNode(Node t,
                  @Nullable Analysis<A,S,T> analysis)Visualize a Node based on the analysis. | 
| String | visualizeBlockTransferInput(Block bb,
                           Analysis<A,S,T> analysis)Visualize the transferInput of a Block based on the analysis. | 
| protected String | visualizeGraphFooter()Return the footer of the generated graph. | 
| protected String | visualizeGraphHeader()Return the header of the generated graph. | 
| String | visualizeNodes(Set<Block> blocks,
              ControlFlowGraph cfg,
              @Nullable Analysis<A,S,T> analysis)Generate the String representation of the nodes of a control flow graph. | 
| String | visualizeSpecialBlock(SpecialBlock sbb)Visualize a SpecialBlock. | 
| String | visualizeStoreArrayVal(FlowExpressions.ArrayAccess arrayValue,
                      A value)Called by  CFAbstractStore#internalVisualize()to visualize the value of arrays
 collected by this Store. | 
| String | visualizeStoreClassVals(FlowExpressions.ClassName className,
                       A value)Called by  CFAbstractStore#internalVisualize()to visualize the value of class names
 collected by this Store. | 
| String | visualizeStoreFieldVals(FlowExpressions.FieldAccess fieldAccess,
                       A value)Called by  CFAbstractStore#internalVisualize()to visualize the value of fields
 collected by this Store. | 
| String | visualizeStoreFooter()Called by  CFAbstractStoreto visualize any information after the invocation ofCFAbstractStore#internalVisualize(). | 
| String | visualizeStoreHeader(String classCanonicalName)Called by a  CFAbstractStoreto visualize the class name before calling theCFAbstractStore#internalVisualize()method. | 
| String | visualizeStoreKeyVal(String keyName,
                    Object value)Called by  CFAbstractStore#internalVisualize()to visualize the specific information
 collected according to the specific kind of Store. | 
| String | visualizeStoreLocalVar(FlowExpressions.LocalVariable localVar,
                      A value)Called by  CFAbstractStore#internalVisualize()to visualize a local variable. | 
| String | visualizeStoreMethodVals(FlowExpressions.MethodCall methodCall,
                        A value)Called by  CFAbstractStore#internalVisualize()to visualize the value of pure method
 calls collected by this Store. | 
| String | visualizeStoreThisVal(A value)Called by  CFAbstractStore#internalVisualize()to visualize the value of the current
 objectthisin this Store. | 
addBlock, addBlockContent, getLastNode, getNodeSimpleName, getProcessOrder, getProcessOrderSimpleString, handleSuccessorsHelper, init, loopOverBlockContents, visualizeBlockHelper, visualizeBlockTransferInputHelper, visualizeGraph, visualizeGraphWithoutHeaderAndFooter, visualizeSpecialBlockHelper, visualizeStorepublic Map<String,Object> visualize(ControlFlowGraph cfg, Block entry, @Nullable Analysis<A,S,T> analysis)
CFGVisualizerentry. The
 concrete actions are implementation dependent.
 An invocation visualize(cfg, entry, null); does not output stores at the beginning
 of basic blocks.
cfg - the CFG to visualizeentry - the entry node of the control flow graph to be representedanalysis - an analysis containing information about the program represented by the CFG.
     The information includes Stores that are valid at the beginning of basic blocks
     reachable from entry and per-node information for value producing Nodes.
     Can also be null to indicate that this information should not be output.DOTCFGVisualizer) or a
     String representation of the CFG (StringCFGVisualizer)public String visualizeNodes(Set<Block> blocks, ControlFlowGraph cfg, @Nullable Analysis<A,S,T> analysis)
AbstractCFGVisualizervisualizeNodes in class AbstractCFGVisualizer<A extends AbstractValue<A>,S extends Store<S>,T extends TransferFunction<A,S>>blocks - the set of all the blocks in a control flow graphcfg - the control flow graphanalysis - the current analysisprotected String addEdge(long sId, long eId, String flowRule)
AbstractCFGVisualizeraddEdge in class AbstractCFGVisualizer<A extends AbstractValue<A>,S extends Store<S>,T extends TransferFunction<A,S>>sId - the ID of current blockeId - the ID of successor blockflowRule - the content of the edgepublic String visualizeBlock(Block bb, @Nullable Analysis<A,S,T> analysis)
CFGVisualizerbb - the blockanalysis - the current analysispublic String visualizeSpecialBlock(SpecialBlock sbb)
CFGVisualizersbb - the special blocksbb: entry, exit,
     or exceptional-exitpublic String visualizeBlockTransferInput(Block bb, Analysis<A,S,T> analysis)
CFGVisualizerbb - the blockanalysis - the current analysispublic String visualizeBlockNode(Node t, @Nullable Analysis<A,S,T> analysis)
CFGVisualizert - the nodeanalysis - the current analysispublic String visualizeStoreThisVal(A value)
CFGVisualizerCFAbstractStore#internalVisualize() to visualize the value of the current
 object this in this Store.value - the value of the current object thisthispublic String visualizeStoreLocalVar(FlowExpressions.LocalVariable localVar, A value)
CFGVisualizerCFAbstractStore#internalVisualize() to visualize a local variable.localVar - the local variablevalue - the value of the local variablepublic String visualizeStoreFieldVals(FlowExpressions.FieldAccess fieldAccess, A value)
CFGVisualizerCFAbstractStore#internalVisualize() to visualize the value of fields
 collected by this Store.fieldAccess - the fieldvalue - the value of the fieldpublic String visualizeStoreArrayVal(FlowExpressions.ArrayAccess arrayValue, A value)
CFGVisualizerCFAbstractStore#internalVisualize() to visualize the value of arrays
 collected by this Store.arrayValue - the arrayvalue - the value of the arraypublic String visualizeStoreMethodVals(FlowExpressions.MethodCall methodCall, A value)
CFGVisualizerCFAbstractStore#internalVisualize() to visualize the value of pure method
 calls collected by this Store.methodCall - the pure method callvalue - the value of the pure method callpublic String visualizeStoreClassVals(FlowExpressions.ClassName className, A value)
CFGVisualizerCFAbstractStore#internalVisualize() to visualize the value of class names
 collected by this Store.className - the class namevalue - the value of the class namepublic String visualizeStoreKeyVal(String keyName, Object value)
CFGVisualizerCFAbstractStore#internalVisualize() to visualize the specific information
 collected according to the specific kind of Store. Currently, these Stores call this method:
 LockStore, NullnessStore, and InitializationStore to visualize
 additional information.keyName - the name of the specific information to be visualizedvalue - the value of the specific information to be visualizedpublic String visualizeStoreHeader(String classCanonicalName)
CFGVisualizerCFAbstractStore to visualize the class name before calling the CFAbstractStore#internalVisualize() method.classCanonicalName - the canonical name of the classpublic String visualizeStoreFooter()
CFGVisualizerCFAbstractStore to visualize any information after the invocation of CFAbstractStore#internalVisualize().public void shutdown()
BaseTypeChecker.
 StringCFGVisualizer does not write into file, so left intentionally blank.
protected String visualizeGraphHeader()
StringCFGVisualizer does not need a specific header, so just return an empty string.
visualizeGraphHeader in class AbstractCFGVisualizer<A extends AbstractValue<A>,S extends Store<S>,T extends TransferFunction<A,S>>protected String visualizeGraphFooter()
StringCFGVisualizer does not need a specific footer, so just return an empty string.
visualizeGraphFooter in class AbstractCFGVisualizer<A extends AbstractValue<A>,S extends Store<S>,T extends TransferFunction<A,S>>