Class 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 Detail

      • tree

        protected final com.sun.source.tree.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 Detail

      • AssignmentNode

        public AssignmentNode​(com.sun.source.tree.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​(com.sun.source.tree.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 Detail

      • 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 com.sun.source.tree.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 java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • equals

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

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

        @SideEffectFree
        public java.util.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