View Javadoc

    1   package net.sourceforge.pmd.lang.ast.xpath.saxon;
    2
    3   import java.util.HashMap;
    4   import java.util.Iterator;
    5   import java.util.Map;
    6
    7   import net.sf.saxon.om.Axis;
    8   import net.sf.saxon.om.AxisIterator;
    9   import net.sf.saxon.om.DocumentInfo;
    10  import net.sf.saxon.om.Navigator;
    11  import net.sf.saxon.om.NodeInfo;
    12  import net.sf.saxon.om.SingleNodeIterator;
    13  import net.sf.saxon.type.Type;
    14  import net.sourceforge.pmd.lang.ast.Node;
    15
    16  /**
    17   * A Saxon OM Document node for an AST Node.
    18   */
    19  public class DocumentNode extends AbstractNodeInfo implements DocumentInfo {
    20
    21      /**
    22       * The root ElementNode of the DocumentNode.
    23       */
    24      protected final ElementNode rootNode;
    25
    26      /**
    27       * Mapping from AST Node to corresponding ElementNode.
    28       */
    29      public final Map<Node, ElementNode> nodeToElementNode = new HashMap<Node, ElementNode>();
    30
    31      /**
    32       * Construct a DocumentNode, with the given AST Node serving as the root
    33       * ElementNode.
    34       *
    35       * @param node The root AST Node.
    36       *
    37       * @see ElementNode
    38       */
    39      public DocumentNode(Node node) {
    40  	this.rootNode = new ElementNode(this, new IdGenerator(), null, node, -1);
    41      }
    42
    43      /**
    44       * {@inheritDoc}
    45       */
    46      public String[] getUnparsedEntity(String name) {
    47  	throw createUnsupportedOperationException("DocumentInfo.getUnparsedEntity(String)");
    48      }
    49
    50      /**
    51       * {@inheritDoc}
    52       */
    53      public Iterator getUnparsedEntityNames() {
    54  	throw createUnsupportedOperationException("DocumentInfo.getUnparsedEntityNames()");
    55      }
    56
    57      /**
    58       * {@inheritDoc}
    59       */
    60      public NodeInfo selectID(String id) {
    61  	throw createUnsupportedOperationException("DocumentInfo.selectID(String)");
    62      }
    63
    64      @Override
    65      public int getNodeKind() {
    66  	return Type.DOCUMENT;
    67      }
    68
    69      @Override
    70      public DocumentInfo getDocumentRoot() {
    71  	return this;
    72      }
    73
    74      @Override
    75      public boolean hasChildNodes() {
    76  	return true;
    77      }
    78
    79      @Override
    80      public AxisIterator iterateAxis(byte axisNumber) {
    81  	switch (axisNumber) {
    82  	case Axis.DESCENDANT:
    83  	    return new Navigator.DescendantEnumeration(this, false, true);
    84  	case Axis.DESCENDANT_OR_SELF:
    85  	    return new Navigator.DescendantEnumeration(this, true, true);
    86  	case Axis.CHILD:
    87  	    return SingleNodeIterator.makeIterator(rootNode);
    88  	default:
    89  	    return super.iterateAxis(axisNumber);
    90  	}
    91      }
    92  }