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

    • tree

      protected final Tree tree
      The underlying assignment tree.
    • lhs

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

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

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

    • AssignmentNode

      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

      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

    • getTarget

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

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

      @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

      @Pure 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

      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

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

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

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

      @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