in src/main/java/org/apache/commons/jxpath/ri/compiler/Path.java [284:328]
protected EvalContext createContextForStep(
final EvalContext context,
final int axis,
NodeTest nodeTest) {
if (nodeTest instanceof NodeNameTest) {
final QName qname = ((NodeNameTest) nodeTest).getNodeName();
final String prefix = qname.getPrefix();
if (prefix != null) {
final String namespaceURI = context.getJXPathContext()
.getNamespaceURI(prefix);
nodeTest = new NodeNameTest(qname, namespaceURI);
}
}
switch (axis) {
case Compiler.AXIS_ANCESTOR :
return new AncestorContext(context, false, nodeTest);
case Compiler.AXIS_ANCESTOR_OR_SELF :
return new AncestorContext(context, true, nodeTest);
case Compiler.AXIS_ATTRIBUTE :
return new AttributeContext(context, nodeTest);
case Compiler.AXIS_CHILD :
return new ChildContext(context, nodeTest, false, false);
case Compiler.AXIS_DESCENDANT :
return new DescendantContext(context, false, nodeTest);
case Compiler.AXIS_DESCENDANT_OR_SELF :
return new DescendantContext(context, true, nodeTest);
case Compiler.AXIS_FOLLOWING :
return new PrecedingOrFollowingContext(context, nodeTest, false);
case Compiler.AXIS_FOLLOWING_SIBLING :
return new ChildContext(context, nodeTest, true, false);
case Compiler.AXIS_NAMESPACE :
return new NamespaceContext(context, nodeTest);
case Compiler.AXIS_PARENT :
return new ParentContext(context, nodeTest);
case Compiler.AXIS_PRECEDING :
return new PrecedingOrFollowingContext(context, nodeTest, true);
case Compiler.AXIS_PRECEDING_SIBLING :
return new ChildContext(context, nodeTest, true, true);
case Compiler.AXIS_SELF :
return new SelfContext(context, nodeTest);
default:
return null; // Never happens
}
}