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.
    static final boolean
    If true, print the owner of each field and this, to disambiguate shadowing.
    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

    • disambiguateOwner

      public static final boolean disambiguateOwner
      If true, print the owner of each field and this, to disambiguate shadowing. This field is intended for debugging.
      See Also:
    • block

      protected @Nullable Block block
      The basic block this node belongs to. If null, this object represents a method formal parameter.

      Is set by setBlock(org.checkerframework.dataflow.cfg.block.Block).

    • lvalue

      protected boolean lvalue
      Is this node an l-value?

      Is set by setLValue().

    • inSource

      protected boolean inSource
      Does this node represent a tree that appears in the source code (true) or one that the CFG builder added while desugaring (false).

      Is set by setInSource(boolean).

    • type

      protected final TypeMirror type
      The type of this node. For Nodes with Trees, this type is the type of the Tree. Otherwise, it is the type is set by the CFGBuilder.
  • 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