java.lang.Object
org.checkerframework.dataflow.cfg.node.Node
All Implemented Interfaces:
org.plumelib.util.UniqueId
Direct Known Subclasses:
ArrayAccessNode, ArrayCreationNode, ArrayTypeNode, AssertionErrorNode, AssignmentNode, BinaryOperationNode, CaseNode, ClassDeclarationNode, ClassNameNode, DeconstructorPatternNode, ExpressionStatementNode, FieldAccessNode, FunctionalInterfaceNode, InstanceOfNode, LambdaResultExpressionNode, LocalVariableNode, MarkerNode, MethodAccessNode, MethodInvocationNode, NarrowingConversionNode, NullChkNode, ObjectCreationNode, PackageNameNode, ParameterizedTypeNode, PrimitiveTypeNode, ReturnNode, StringConversionNode, SuperNode, SwitchExpressionNode, SynchronizedNode, TernaryExpressionNode, ThisNode, ThrowNode, TypeCastNode, UnaryOperationNode, ValueLiteralNode, VariableDeclarationNode, WideningConversionNode

public abstract class Node extends Object implements org.plumelib.util.UniqueId
A node in the abstract representation used for Java code inside a basic block.

The following invariants hold:

 block == null || block instanceof RegularBlock || block instanceof ExceptionBlock
 block != null ⇔ block.getNodes().contains(this)
 
 type != null
 tree != null ⇒ node.getType() == InternalUtils.typeOf(node.getTree())
 
Note that two Nodes can be .equals but represent different CFG nodes. Take care to use reference equality, maps that handle identity IdentityHashMap, and sets like IdentityArraySet.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected @Nullable Block
    The basic block this node belongs to.
    protected boolean
    Does this node represent a tree that appears in the source code (true) or one that the CFG builder added while desugaring (false).
    protected boolean
    Is this node an l-value?
    protected final TypeMirror
    The type of this node.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Creates a new Node.
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract <R, P> R
    accept(NodeVisitor<R,P> visitor, P p)
    Accept method of the visitor pattern.
    Returns the basic block this node belongs to (or null if it represents the parameter of a method).
    boolean
    Return whether this node represents a tree that appears in the source code (true) or one that the CFG or builder added while desugaring (false).
    abstract Collection<Node>
    Returns a collection containing all of the operand Nodes of this Node.
    Returns a collection containing all of the operand Nodes of this Node, as well as (transitively) the operands of its operands.
    abstract @Nullable Tree
    Returns the Tree in the abstract syntax tree, or null if no corresponding tree exists.
    Returns a TypeMirror representing the type of a Node.
    long
     
    boolean
    Is the node an lvalue or not?
    static String
    Returns a verbose string representation of a collection of nodes, useful for debugging..
    void
    Set the basic block this node belongs to.
    void
    setInSource(boolean inSrc)
     
    void
    Make this node an l-value.
    Returns a verbose string representation of this, useful for debugging.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.plumelib.util.UniqueId

    getClassAndUid
  • Field Details

  • Constructor Details

    • Node

      protected Node(TypeMirror type)
      Creates a new Node.
      Parameters:
      type - the type of the node
  • Method Details

    • getUid

      @Pure public long getUid(@UnknownInitialization Node this)
      Specified by:
      getUid in interface org.plumelib.util.UniqueId
    • getBlock

      @Pure public @Nullable Block getBlock()
      Returns the basic block this node belongs to (or null if it represents the parameter of a method).
      Returns:
      the basic block this node belongs to (or null if it represents the parameter of a method)
    • setBlock

      public void setBlock(Block b)
      Set the basic block this node belongs to.
    • getTree

      @Pure public abstract @Nullable Tree getTree()
      Returns the Tree in the abstract syntax tree, or null if no corresponding tree exists. For instance, this is the case for an ImplicitThisNode.
      Returns:
      the corresponding Tree or null
    • getType

      @Pure public TypeMirror getType()
      Returns a TypeMirror representing the type of a Node. A Node will always have a type even when it has no Tree.
      Returns:
      a TypeMirror representing the type of this Node
    • accept

      public abstract <R, P> R accept(NodeVisitor<R,P> visitor, P p)
      Accept method of the visitor pattern.
      Type Parameters:
      R - result type of the operation
      P - parameter type
      Parameters:
      visitor - the visitor to be applied to this node
      p - the parameter for this operation
    • isLValue

      @Pure public boolean isLValue()
      Is the node an lvalue or not?
    • setLValue

      public void setLValue()
      Make this node an l-value.
    • getInSource

      @Pure public boolean getInSource()
      Return whether this node represents a tree that appears in the source code (true) or one that the CFG or builder added while desugaring (false).
      Returns:
      whether this node represents a tree that appears in the source code
    • setInSource

      public void setInSource(boolean inSrc)
    • getOperands

      @SideEffectFree public abstract Collection<Node> getOperands()
      Returns a collection containing all of the operand Nodes of this Node.
      Returns:
      a collection containing all of the operand Nodes of this Node
    • getTransitiveOperands

      @Pure public Collection<Node> getTransitiveOperands()
      Returns a collection containing all of the operand Nodes of this Node, as well as (transitively) the operands of its operands.
      Returns:
      a collection containing all of the operand Nodes of this Node, as well as (transitively) the operands of its operands
    • toStringDebug

      @Pure public String toStringDebug()
      Returns a verbose string representation of this, useful for debugging.
      Returns:
      a printed representation of this
    • nodeCollectionToString

      @Pure public static String nodeCollectionToString(Collection<? extends Node> nodes)
      Returns a verbose string representation of a collection of nodes, useful for debugging..
      Parameters:
      nodes - a collection of nodes to format
      Returns:
      a printed representation of the given collection