in src/main/java/org/apache/commons/jxpath/ri/parser/XPathParser.java [3093:3255]
final public void NodeTest(final ArrayList steps) throws ParseException {
int axis;
int type = -1;
String instruction = null;
Object name = null;
Object s;
Object p;
final ArrayList ps = new ArrayList();
switch (jj_nt.kind) {
case OR:
case AND:
case MOD:
case DIV:
case NODE:
case TEXT:
case COMMENT:
case PI:
case AXIS_SELF:
case AXIS_CHILD:
case AXIS_PARENT:
case AXIS_ANCESTOR:
case AXIS_ATTRIBUTE:
case AXIS_NAMESPACE:
case AXIS_PRECEDING:
case AXIS_FOLLOWING:
case AXIS_DESCENDANT:
case AXIS_ANCESTOR_OR_SELF:
case AXIS_FOLLOWING_SIBLING:
case AXIS_PRECEDING_SIBLING:
case AXIS_DESCENDANT_OR_SELF:
case FUNCTION_LAST:
case FUNCTION_POSITION:
case FUNCTION_COUNT:
case FUNCTION_ID:
case FUNCTION_KEY:
case FUNCTION_LOCAL_NAME:
case FUNCTION_NAMESPACE_URI:
case FUNCTION_NAME:
case FUNCTION_STRING:
case FUNCTION_CONCAT:
case FUNCTION_STARTS_WITH:
case FUNCTION_ENDS_WITH:
case FUNCTION_CONTAINS:
case FUNCTION_SUBSTRING_BEFORE:
case FUNCTION_SUBSTRING_AFTER:
case FUNCTION_SUBSTRING:
case FUNCTION_STRING_LENGTH:
case FUNCTION_NORMALIZE_SPACE:
case FUNCTION_TRANSLATE:
case FUNCTION_BOOLEAN:
case FUNCTION_NOT:
case FUNCTION_TRUE:
case FUNCTION_FALSE:
case FUNCTION_NULL:
case FUNCTION_LANG:
case FUNCTION_NUMBER:
case FUNCTION_SUM:
case FUNCTION_FLOOR:
case FUNCTION_CEILING:
case FUNCTION_ROUND:
case FUNCTION_FORMAT_NUMBER:
case NCName:
case 87:
case 89:
axis = AxisSpecifier();
if (jj_2_3(2147483647)) {
type = NodeType();
jj_consume_token(81);
jj_consume_token(82);
} else if (jj_2_4(2147483647)) {
jj_consume_token(PI);
jj_consume_token(81);
jj_consume_token(Literal);
instruction = unescape(token.image.substring(1, token.image.length() - 1));
jj_consume_token(82);
} else {
switch (jj_nt.kind) {
case OR:
case AND:
case MOD:
case DIV:
case NODE:
case TEXT:
case COMMENT:
case PI:
case FUNCTION_LAST:
case FUNCTION_POSITION:
case FUNCTION_COUNT:
case FUNCTION_ID:
case FUNCTION_KEY:
case FUNCTION_LOCAL_NAME:
case FUNCTION_NAMESPACE_URI:
case FUNCTION_NAME:
case FUNCTION_STRING:
case FUNCTION_CONCAT:
case FUNCTION_STARTS_WITH:
case FUNCTION_ENDS_WITH:
case FUNCTION_CONTAINS:
case FUNCTION_SUBSTRING_BEFORE:
case FUNCTION_SUBSTRING_AFTER:
case FUNCTION_SUBSTRING:
case FUNCTION_STRING_LENGTH:
case FUNCTION_NORMALIZE_SPACE:
case FUNCTION_TRANSLATE:
case FUNCTION_BOOLEAN:
case FUNCTION_NOT:
case FUNCTION_TRUE:
case FUNCTION_FALSE:
case FUNCTION_NULL:
case FUNCTION_LANG:
case FUNCTION_NUMBER:
case FUNCTION_SUM:
case FUNCTION_FLOOR:
case FUNCTION_CEILING:
case FUNCTION_ROUND:
case FUNCTION_FORMAT_NUMBER:
case NCName:
case 89:
name = WildcardName();
break;
default:
jj_la1[10] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
break;
case 83:
jj_consume_token(83);
axis = Compiler.AXIS_SELF;
type = Compiler.NODE_TYPE_NODE;
break;
case 84:
jj_consume_token(84);
axis = Compiler.AXIS_PARENT;
type = Compiler.NODE_TYPE_NODE;
break;
default:
jj_la1[11] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
label_3: while (true) {
switch (jj_nt.kind) {
case 85:
;
break;
default:
jj_la1[12] = jj_gen;
break label_3;
}
p = Predicate();
ps.add(p);
}
if (name != null) {
s = compiler.nodeNameTest(name);
} else if (instruction != null) {
s = compiler.processingInstructionTest(instruction);
} else {
s = compiler.nodeTypeTest(type);
}
steps.add(compiler.step(axis, s, ps.toArray()));
}