Class DOTCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>

java.lang.Object
org.checkerframework.dataflow.cfg.visualize.AbstractCFGVisualizer<V,S,T>
org.checkerframework.dataflow.cfg.visualize.DOTCFGVisualizer<V,S,T>
All Implemented Interfaces:
CFGVisualizer<V,S,T>

public class DOTCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>> extends AbstractCFGVisualizer<V,S,T>
Generate a graph description in the DOT language of a control graph.
  • Field Details

    • outDir

      protected String outDir
      The output directory.
    • checkerName

      protected @Nullable String checkerName
      The (optional) checker name. Used as a part of the name of the output dot file.
    • generated

      protected Map<String,String> generated
      Mapping from class/method representation to generated dot file.
    • leftJustifiedTerminator

      protected static final String leftJustifiedTerminator
      Terminator for lines that are left-justified.
      See Also:
  • Constructor Details

    • DOTCFGVisualizer

      public DOTCFGVisualizer()
  • Method Details

    • init

      public void init(Map<String,Object> args)
      Description copied from interface: CFGVisualizer
      Specified by:
      init in interface CFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
      Overrides:
      init in class AbstractCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
      Parameters:
      args - implementation-dependent options
    • getSeparator

      public String getSeparator()
      Description copied from interface: CFGVisualizer
      Returns the separator for lines within a node's representation.
      Returns:
      the separator for lines within a node's representation
    • visualize

      public Map<String,Object> visualize(ControlFlowGraph cfg, Block entry, @Nullable Analysis<V,S,T> analysis)
      Description copied from interface: CFGVisualizer
      Creates a visualization representing the control flow graph starting at entry. The keys and values in the returned map are implementation dependent. The method should not perform any actions.

      An invocation visualize(cfg, entry, null); does not output stores at the beginning of basic blocks.

      Parameters:
      cfg - the CFG to visualize
      entry - the entry node of the control flow graph to be represented
      analysis - 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.
      Returns:
      visualization results, e.g. generated file names (DOTCFGVisualizer) or a String representation of the CFG (StringCFGVisualizer)
      See Also:
    • visualizeWithAction

      public Map<String,Object> visualizeWithAction(ControlFlowGraph cfg, Block entry, @Nullable Analysis<V,S,T> analysis)
      Description copied from interface: CFGVisualizer
      Output a visualization representing the control flow graph starting at entry. The keys and values in the returned map are implementation dependent. The concrete actions are implementation dependent, and can include outputting information and producing files.

      An invocation visualizeWithAction(cfg, entry, null); does not output stores at the beginning of basic blocks.

      Parameters:
      cfg - the CFG to visualize
      entry - the entry node of the control flow graph to be represented
      analysis - 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.
      Returns:
      visualization results, e.g. generated file names (DOTCFGVisualizer) or a String representation of the CFG (StringCFGVisualizer)
      See Also:
    • visualizeNodes

      public String visualizeNodes(Set<Block> blocks, ControlFlowGraph cfg, @Nullable Analysis<V,S,T> analysis)
      Description copied from class: AbstractCFGVisualizer
      Generate the String representation of the nodes of a control flow graph.
      Specified by:
      visualizeNodes in class AbstractCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
      Parameters:
      blocks - the set of all the blocks in a control flow graph
      cfg - the control flow graph
      analysis - the current analysis
      Returns:
      the String representation of the nodes
    • visualizeEdge

      protected String visualizeEdge(Object sId, Object eId, String flowRule)
      Description copied from class: AbstractCFGVisualizer
      Generate the String representation of an edge.
      Specified by:
      visualizeEdge in class AbstractCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
      Parameters:
      sId - a representation of the current block, such as its ID
      eId - a representation of the successor block, such as its ID
      flowRule - the content of the edge
      Returns:
      the String representation of the edge
    • visualizeBlock

      public String visualizeBlock(Block bb, @Nullable Analysis<V,S,T> analysis)
      Description copied from interface: CFGVisualizer
      Visualize a block based on the analysis.
      Parameters:
      bb - the block
      analysis - the current analysis
      Returns:
      the String representation of the given block
    • visualizeSpecialBlock

      public String visualizeSpecialBlock(SpecialBlock sbb)
      Description copied from interface: CFGVisualizer
      Visualize a SpecialBlock.
      Parameters:
      sbb - the special block
      Returns:
      the String representation of the type of the special block sbb: entry, exit, or exceptional-exit
    • visualizeConditionalBlock

      public String visualizeConditionalBlock(ConditionalBlock cbb)
      Description copied from interface: CFGVisualizer
      Visualize a ConditionalBlock.
      Parameters:
      cbb - the conditional block
      Returns:
      the String representation of the conditional block
    • visualizeBlockTransferInputBefore

      public String visualizeBlockTransferInputBefore(Block bb, Analysis<V,S,T> analysis)
      Description copied from interface: CFGVisualizer
      Visualize the transferInput before a Block based on the analysis.
      Parameters:
      bb - the block
      analysis - the current analysis
      Returns:
      the String representation of the transferInput before the given block
    • visualizeBlockTransferInputAfter

      public String visualizeBlockTransferInputAfter(Block bb, Analysis<V,S,T> analysis)
      Description copied from interface: CFGVisualizer
      Visualize the transferInput after a Block based on the analysis.
      Parameters:
      bb - the block
      analysis - the current analysis
      Returns:
      the String representation of the transferInput after the given block
    • dotOutputFileName

      protected String dotOutputFileName(UnderlyingAST ast)
      Create a dot file and return its name.
      Parameters:
      ast - an abstract syntax tree
      Returns:
      the file name used for DOT output
    • format

      protected String format(Object obj)
      Description copied from class: AbstractCFGVisualizer
      Format the given object as a String suitable for the output format, i.e. with format-specific characters escaped.
      Specified by:
      format in class AbstractCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
      Parameters:
      obj - an object
      Returns:
      the formatted String from the given object
    • visualizeStoreThisVal

      public String visualizeStoreThisVal(V value)
      Description copied from interface: CFGVisualizer
      Called by CFAbstractStore#internalVisualize() to visualize the value of the current object this in this Store.
      Parameters:
      value - the value of the current object this
      Returns:
      the String representation of this
    • visualizeStoreLocalVar

      public String visualizeStoreLocalVar(LocalVariable localVar, V value)
      Description copied from interface: CFGVisualizer
      Called by CFAbstractStore#internalVisualize() to visualize a local variable.
      Parameters:
      localVar - the local variable
      value - the value of the local variable
      Returns:
      the String representation of the local variable
    • visualizeStoreFieldVal

      public String visualizeStoreFieldVal(FieldAccess fieldAccess, V value)
      Description copied from interface: CFGVisualizer
      Called by CFAbstractStore#internalVisualize() to visualize the value of one field collected by this Store.
      Parameters:
      fieldAccess - the field
      value - the value of the field
      Returns:
      the String representation of the field
    • visualizeStoreArrayVal

      public String visualizeStoreArrayVal(ArrayAccess arrayValue, V value)
      Description copied from interface: CFGVisualizer
      Called by CFAbstractStore#internalVisualize() to visualize the value of one array collected by this Store.
      Parameters:
      arrayValue - the array
      value - the value of the array
      Returns:
      the String representation of the array
    • visualizeStoreMethodVals

      public String visualizeStoreMethodVals(MethodCall methodCall, V value)
      Description copied from interface: CFGVisualizer
      Called by CFAbstractStore#internalVisualize() to visualize the value of pure method calls collected by this Store.
      Parameters:
      methodCall - the pure method call
      value - the value of the pure method call
      Returns:
      the String representation of the pure method call
    • visualizeStoreClassVals

      public String visualizeStoreClassVals(ClassName className, V value)
      Description copied from interface: CFGVisualizer
      Called by CFAbstractStore#internalVisualize() to visualize the value of class names collected by this Store.
      Parameters:
      className - the class name
      value - the value of the class name
      Returns:
      the String representation of the class name
    • visualizeStoreKeyVal

      public String visualizeStoreKeyVal(String keyName, Object value)
      Description copied from interface: CFGVisualizer
      Called by CFAbstractStore#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.
      Parameters:
      keyName - the name of the specific information to be visualized
      value - the value of the specific information to be visualized
      Returns:
      the String representation of the specific information
    • shutdown

      public void shutdown()
      Write a file methods.txt that contains a mapping from source code location to generated dot file.
    • visualizeGraphHeader

      protected String visualizeGraphHeader()
      Description copied from class: AbstractCFGVisualizer
      Return the header of the generated graph.
      Specified by:
      visualizeGraphHeader in class AbstractCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
      Returns:
      the String representation of the header of the control flow graph
    • visualizeGraphFooter

      protected String visualizeGraphFooter()
      Description copied from class: AbstractCFGVisualizer
      Return the footer of the generated graph.
      Specified by:
      visualizeGraphFooter in class AbstractCFGVisualizer<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
      Returns:
      the String representation of the footer of the control flow graph