Class StringCFGVisualizer<V extends AbstractValue<V>,​S extends Store<S>,​T extends TransferFunction<V,​S>>

    • Field Detail

      • out

        protected java.io.PrintStream out
        Stream to output String representation to.
    • Constructor Detail

      • StringCFGVisualizer

        public StringCFGVisualizer()
        Create a StringCFGVisualizer.
    • Method Detail

      • getSeparator

        public java.lang.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 java.util.Map<java.lang.String,​java.lang.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:
        CFGVisualizer.visualizeWithAction(ControlFlowGraph, Block, Analysis)
      • visualizeWithAction

        public java.util.Map<java.lang.String,​java.lang.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:
        CFGVisualizer.visualize(ControlFlowGraph, Block, Analysis)
      • visualizeEdge

        protected java.lang.String visualizeEdge​(java.lang.Object sId,
                                                 java.lang.Object eId,
                                                 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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
      • format

        protected java.lang.String format​(java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.String visualizeStoreKeyVal​(java.lang.String keyName,
                                                     java.lang.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()
        Shutdown method called once from the shutdown hook of the BaseTypeChecker.

        StringCFGVisualizer does not write into file, so left intentionally blank.

      • visualizeGraphHeader

        protected java.lang.String visualizeGraphHeader()
        Return the header of the generated graph.

        StringCFGVisualizer does not need a specific header, so just return an empty string.

        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 java.lang.String visualizeGraphFooter()
        Return the footer of the generated graph.

        StringCFGVisualizer does not need a specific footer, so just return an empty string.

        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