p.match = contextNode.match;
p.setMatches(contextNode.getMatches());
	private final void addChildren(		NodeProxy contextNode,		NodeSet result,		NodeImpl node,		Iterator iter,		int recursions) {		if (node.hasChildNodes()) {			NodeImpl child;			Value value;			NodeProxy p;			for (int i = 0; i < node.getChildCount(); i++) {				child = (NodeImpl) iter.next();				child.setOwnerDocument(node.getOwnerDocument());				child.setGID(node.firstChildID() + i);				p = new NodeProxy(child.ownerDocument, child.gid, child.getNodeType());				p.setInternalAddress(child.internalAddress);				p.match = contextNode.match;				if (test.matches(child)) {					if (((axis == Constants.CHILD_AXIS						|| axis == Constants.ATTRIBUTE_AXIS)						&& recursions == 0) ||						(axis == Constants.DESCENDANT_AXIS						|| axis == Constants.DESCENDANT_SELF_AXIS						|| axis == Constants.DESCENDANT_ATTRIBUTE_AXIS)) {						result.add(p);						p.copyContext(contextNode);						if (useSelfAsContext && inPredicate) {							p.addContextNode(p);						} else if (inPredicate)							p.addContextNode(contextNode);					}				}				addChildren(contextNode, result, child, iter, recursions + 1);			}		} else if (test.matches(node)) {			if((axis == Constants.CHILD_AXIS || axis == Constants.ATTRIBUTE_AXIS)				&& recursions > 0)				return;			NodeProxy p = new NodeProxy(node.ownerDocument, node.gid, node.getNodeType());			p.setInternalAddress(node.internalAddress);			p.match = contextNode.match;			result.add(p);			p.copyContext(contextNode);			if (useSelfAsContext && inPredicate) {				p.addContextNode(p);			} else if (inPredicate)				p.addContextNode(contextNode);		}	}