Class AssignmentNode

java.lang.Object
org.checkerframework.dataflow.cfg.node.Node
org.checkerframework.dataflow.cfg.node.AssignmentNode
All Implemented Interfaces:
org.plumelib.util.UniqueId

public class AssignmentNode extends Node
A node for an assignment:
   variable = expression
   variable += expression
   expression . field = expression
   expression [ index ] = expression
 
We allow assignments without corresponding AST Trees.

Some desugarings create additional assignments to synthetic local variables. Such assignment nodes are marked as synthetic to allow special handling in transfer functions.

String concatenation compound assignments are desugared to an assignment and a string concatenation.

Numeric compound assignments are desugared to an assignment and a numeric operation.

  • Field Details Link icon

    • tree Link icon

      protected final Tree tree
      The underlying assignment tree.
    • lhs Link icon

      protected final Node lhs
      The node for the LHS of the assignment tree.
    • rhs Link icon

      protected final Node rhs
      The node for the RHS of the assignment tree.
    • synthetic Link icon

      protected final boolean synthetic
      Whether the assignment node is synthetic
  • Constructor Details Link icon

    • AssignmentNode Link icon

      public AssignmentNode(Tree tree, Node target, Node expression)
      Create a (non-synthetic) AssignmentNode.
      Parameters:
      tree - the AssignmentTree corresponding to the AssignmentNode
      target - the lhs of tree
      expression - the rhs of tree
    • AssignmentNode Link icon

      public AssignmentNode(Tree tree, Node target, Node expression, boolean synthetic)
      Create an AssignmentNode.
      Parameters:
      tree - the AssignmentTree corresponding to the AssignmentNode
      target - the lhs of tree
      expression - the rhs of tree
      synthetic - whether the assignment node is synthetic
  • Method Details Link icon

    • getTarget Link icon

      @Pure public Node getTarget()
      Returns the left-hand-side of the assignment.
      Returns:
      the left-hand-side of the assignment
    • getExpression Link icon

      @Pure public Node getExpression()
      Returns the right-hand-side of the assignment.
      Returns:
      the right-hand-side of the assignment
    • getTree Link icon

      @Pure public Tree getTree()
      Description copied from class: Node
      Returns the Tree in the abstract syntax tree, or null if no corresponding tree exists. For instance, this is the case for an ImplicitThisNode.
      Specified by:
      getTree in class Node
      Returns:
      the corresponding Tree or null
    • isSynthetic Link icon

      public boolean isSynthetic()
      Check if the assignment node is synthetic, e.g. the synthetic assignment in a ternary expression.
      Returns:
      true if the assignment node is synthetic
    • accept Link icon

      public <R, P> R accept(NodeVisitor<R,P> visitor, P p)
      Description copied from class: Node
      Accept method of the visitor pattern.
      Specified by:
      accept in class Node
      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
    • toString Link icon

      @Pure public String toString()
      Overrides:
      toString in class Object
    • equals Link icon

      @Pure public boolean equals(@Nullable Object obj)
      Overrides:
      equals in class Object
    • hashCode Link icon

      @Pure public int hashCode()
      Overrides:
      hashCode in class Object
    • getOperands Link icon

      @SideEffectFree public Collection<Node> getOperands()
      Description copied from class: Node
      Returns a collection containing all of the operand Nodes of this Node.
      Specified by:
      getOperands in class Node
      Returns:
      a collection containing all of the operand Nodes of this Node