if(axis == Constants.DESCENDANT_AXIS || axis == Constants.DESCENDANT_SELF_AXIS) addChildren(contextNode, result, child, iter, recursions + 1);
addChildren(contextNode, result, child, iter, recursions + 1);
	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(),						child.internalAddress);				p.matches = contextNode.matches;				if (test.matches(child)) {					if ((axis == Constants.CHILD_AXIS || axis == Constants.ATTRIBUTE_AXIS)						&& recursions == 0) {						result.add(p);						if (useSelfAsContext && inPredicate)							p.addContextNode(p);						else if (inPredicate)							p.addContextNode(contextNode);						else							p.copyContext(contextNode);					} else if (						(axis == Constants.DESCENDANT_AXIS							|| axis == Constants.DESCENDANT_SELF_AXIS)) {						result.add(p);						if (useSelfAsContext && inPredicate)							p.addContextNode(p);						else if (inPredicate)							p.addContextNode(contextNode);						else							p.copyContext(contextNode);					} else if (axis == Constants.ATTRIBUTE_AXIS)						return;				}				if(axis == Constants.DESCENDANT_AXIS || axis == Constants.DESCENDANT_SELF_AXIS)					addChildren(contextNode, result, child, iter, recursions + 1);			}		}	}