Clover coverage report - PMD - 3.7 Coverage timestamp: Wed May 31 2006 09:25:59 EDT FRAMES NO FRAMES |
file stats: | LOC: | 89 |  | Methods: | 9
| NCLOC: | 67 |  | Classes: | 1
Source file | Conditionals | Statements | Methods | TOTAL
NodeIterator.java | 83.3% | 90.3% | 88.9% | 87.9% |

1 |  | /**
2 |  | * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 |  | */
4 |  | package net.sourceforge.pmd.jaxen;
5 |  |
6 |  | import net.sourceforge.pmd.ast.Node;
7 |  |
8 |  | import java.util.Iterator;
9 |  | import java.util.NoSuchElementException;
10 |  |
11 |  | /**
12 |  | * @author daniels
13 |  | */
14 |  | public abstract class NodeIterator implements Iterator {
15 |  |
16 |  | private Node node;
17 |  |
18 | 36770 | public NodeIterator(Node contextNode) {
19 | 36770 | this.node = getFirstNode(contextNode);
20 |  | }
21 |  |
22 | 104805 | public boolean hasNext() {
23 | 104805 | return node != null;
24 |  | }
25 |  |
26 | 36015 | public Object next() {
27 | 36015 | if (node == null)
28 | 0 | throw new NoSuchElementException();
29 | 36015 | Node ret = node;
30 | 36015 | node = getNextNode(node);
31 | 36015 | return ret;
32 |  | }
33 |  |
34 | 0 | public void remove() {
35 | 0 | throw new UnsupportedOperationException();
36 |  | }
37 |  |
38 |  | protected abstract Node getFirstNode(Node contextNode);
39 |  |
40 |  | protected abstract Node getNextNode(Node contextNode);
41 |  |
42 | 22 | protected Node getPreviousSibling(Node contextNode) {
43 | 22 | Node parentNode = contextNode.jjtGetParent();
44 | 22 | if (parentNode != null) {
45 | 19 | int prevPosition = getPositionFromParent(contextNode) - 1;
46 | 19 | if (prevPosition >= 0) {
47 | 6 | return parentNode.jjtGetChild(prevPosition);
48 |  | }
49 |  | }
50 | 16 | return null;
51 |  | }
52 |  |
53 | 36105 | private int getPositionFromParent(Node contextNode) {
54 | 36105 | Node parentNode = contextNode.jjtGetParent();
55 | 45334 | for (int i = 0; i < parentNode.jjtGetNumChildren(); i++) {
56 | 45334 | if (parentNode.jjtGetChild(i) == contextNode) {
57 | 36105 | return i;
58 |  | }
59 |  | }
60 | 0 | throw new RuntimeException("Node was not a child of it's parent ???");
61 |  | }
62 |  |
63 | 36086 | protected Node getNextSibling(Node contextNode) {
64 | 36086 | Node parentNode = contextNode.jjtGetParent();
65 | 36086 | if (parentNode != null) {
66 | 36086 | int nextPosition = getPositionFromParent(contextNode) + 1;
67 | 36086 | if (nextPosition < parentNode.jjtGetNumChildren()) {
68 | 7035 | return parentNode.jjtGetChild(nextPosition);
69 |  | }
70 |  | }
71 | 29051 | return null;
72 |  | }
73 |  |
74 | 36683 | protected Node getFirstChild(Node contextNode) {
75 | 36683 | if (contextNode.jjtGetNumChildren() > 0) {
76 | 28992 | return contextNode.jjtGetChild(0);
77 |  | } else {
78 | 7691 | return null;
79 |  | }
80 |  | }
81 |  |
82 | 4 | protected Node getLastChild(Node contextNode) {
83 | 4 | if (contextNode.jjtGetNumChildren() > 0) {
84 | 2 | return contextNode.jjtGetChild(contextNode.jjtGetNumChildren() - 1);
85 |  | } else {
86 | 2 | return null;
87 |  | }
88 |  | }
89 |  | }