public NodeIterator childIterator(NodeTest test, boolean reverse, NodePointer startWith) { if (test == null) { return createNodeIterator(null, reverse, startWith); } if (test instanceof NodeNameTest) { NodeNameTest nodeNameTest = (NodeNameTest) test; QName testName = nodeNameTest.getNodeName(); if (isValidProperty(testName)) { return createNodeIterator(nodeNameTest.isWildcard() ? null : testName.toString(), reverse, startWith); } return null; } return test instanceof NodeTypeTest && ((NodeTypeTest) test).getNodeType() == Compiler.NODE_TYPE_NODE ? createNodeIterator(null, reverse, startWith) : null; }
/** * Create the child pointer for a given step. * @param parentPointer parent pointer * @param step associated step * @return NodePointer */ private static NodePointer createChildPointerForStep( PropertyOwnerPointer parentPointer, Step step) { int axis = step.getAxis(); if (axis == Compiler.AXIS_CHILD || axis == Compiler.AXIS_ATTRIBUTE) { QName name = ((NodeNameTest) step.getNodeTest()).getNodeName(); if (axis == Compiler.AXIS_ATTRIBUTE && isLangAttribute(name)) { return new LangAttributePointer(parentPointer); } if (parentPointer.isValidProperty(name)) { NodePointer childPointer = parentPointer.getPropertyPointer(); ((PropertyPointer) childPointer).setPropertyName( name.toString()); childPointer.setAttribute(axis == Compiler.AXIS_ATTRIBUTE); return childPointer; } //invalid property gets nothing, not even a NullPointer return null; } return parentPointer; }