Class NodeBase

java.lang.Object
org.glassfish.pfl.dynamic.codegen.impl.AttributedObjectBase
org.glassfish.pfl.dynamic.codegen.impl.NodeBase
All Implemented Interfaces:
AttributedObject, Node, CopyInterceptor
Direct Known Subclasses:
ExpressionFactory.ExpressionBase, StatementBase

public class NodeBase extends AttributedObjectBase implements Node, CopyInterceptor
Base class for implementing various kinds of Nodes in the AST. This mainly supports dynamic attributes. It also supports dynamic delegation to another node. Dynamic attributes not found in the current node will automatically be searched for in the delegate.
  • Field Details

    • parent

      @Copy(IDENTITY) private Node parent
    • nextId

      private static int nextId
    • myId

      private int myId
  • Constructor Details

    • NodeBase

      public NodeBase(Node parent)
  • Method Details

    • preCopy

      public void preCopy()
      Specified by:
      preCopy in interface CopyInterceptor
      Overrides:
      preCopy in class AttributedObjectBase
    • postCopy

      public void postCopy()
      Specified by:
      postCopy in interface CopyInterceptor
      Overrides:
      postCopy in class AttributedObjectBase
    • getNewId

      private static int getNewId()
    • getAncestor

      public final <T extends Node> T getAncestor(Class<T> type)
      Description copied from interface: Node
      Return the first ancestor of this node of the given type, if any. Throws IllegalArgumentException if not found.
      Specified by:
      getAncestor in interface Node
    • id

      public int id()
      Description copied from interface: Node
      Return the unique ID of this node. This starts at 1 and is incremented for each new Node that is created.
      Specified by:
      id in interface Node
    • parent

      public final Node parent()
      Description copied from interface: Node
      Return the Node that contains (and created) this Node.
      Specified by:
      parent in interface Node
    • parent

      public final void parent(Node node)
      Description copied from interface: Node
      Set the parent to a new value. Should only be called inside NodeBase.
      Specified by:
      parent in interface Node
    • copy

      public <T extends Node> T copy(Class<T> cls)
      Description copied from interface: Node
      Make a deep copy of this node. If nn = n.copy(), then n.parent() == nn.parent(), which also means that the parent is NOT copied.
      Specified by:
      copy in interface Node
    • copy

      public <T extends Node> T copy(Node newParent, Class<T> cls)
      Description copied from interface: Node
      Copy setting a new parent in the result.
      Specified by:
      copy in interface Node
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • accept

      public void accept(Visitor visitor)
      Description copied from interface: Node
      Accept the visitor and allow it to perform actions on this Node.
      Specified by:
      accept in interface Node