You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by dm...@apache.org on 2002/08/10 03:39:29 UTC
cvs commit: jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler ExpressionPath.java Path.java
dmitri 2002/08/09 18:39:29
Modified: jxpath/src/java/org/apache/commons/jxpath/ri/compiler
ExpressionPath.java Path.java
Log:
Changed to new SimplePathInterpreter APIs
Revision Changes Path
1.5 +8 -12 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/ExpressionPath.java
Index: ExpressionPath.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/ExpressionPath.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ExpressionPath.java 8 May 2002 00:39:59 -0000 1.4
+++ ExpressionPath.java 10 Aug 2002 01:39:29 -0000 1.5
@@ -74,8 +74,6 @@
*/
public class ExpressionPath extends Path {
- public static final String BASIC_PREDICATES_HINT = "basicPredicatesHint";
-
private Expression expression;
private Expression predicates[];
@@ -186,6 +184,7 @@
context = evalContext.getRootContext().getConstantContext(value);
}
+
if (firstMatch && isSimpleExpressionPath() &&
!(context instanceof UnionContext)){
EvalContext ctx = context;
@@ -193,16 +192,13 @@
if (ptr != null &&
(ptr.getIndex() == NodePointer.WHOLE_COLLECTION ||
predicates == null || predicates.length == 0)){
- NodePointer pointer = SimplePathInterpreter.
- interpretPredicates(evalContext, ptr, predicates);
- return SimplePathInterpreter.interpretPath(evalContext,
- pointer, getSteps());
+ return SimplePathInterpreter.
+ interpretSimpleExpressionPath(
+ evalContext, ptr, predicates, getSteps());
}
}
-
if (predicates != null){
for (int j = 0; j < predicates.length; j++){
-// System.err.println("PREDICATE: " + predicates[j]);
context = new PredicateContext(context, predicates[j]);
}
}
1.5 +34 -21 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/Path.java
Index: Path.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/Path.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Path.java 8 May 2002 00:39:59 -0000 1.4
+++ Path.java 10 Aug 2002 01:39:29 -0000 1.5
@@ -74,7 +74,6 @@
public abstract class Path extends Expression {
private Step[] steps;
- public static final String BASIC_PATH_HINT = "basicPathHint";
private boolean basicKnown = false;
private boolean basic;
@@ -109,16 +108,26 @@
basic = true;
Step[] steps = getSteps();
for (int i = 0; i < steps.length; i++){
- if (steps[i].getAxis() != Compiler.AXIS_CHILD ||
- !(steps[i].getNodeTest() instanceof NodeNameTest) ||
- ((NodeNameTest)steps[i].getNodeTest()).
+ boolean accepted = false;
+ if (steps[i].getAxis() == Compiler.AXIS_SELF &&
+ (steps[i].getNodeTest() instanceof NodeTypeTest) &&
+ ((NodeTypeTest)steps[i].getNodeTest()).getNodeType() ==
+ Compiler.NODE_TYPE_NODE){
+ accepted = true;
+ }
+ else if (steps[i].getAxis() == Compiler.AXIS_CHILD &&
+ (steps[i].getNodeTest() instanceof NodeNameTest) &&
+ !((NodeNameTest)steps[i].getNodeTest()).
getNodeName().getName().equals("*")){
+ accepted = true;
+ }
+ if (accepted){
+ accepted = areBasicPredicates(steps[i].getPredicates());
+ }
+ if (!accepted){
basic = false;
break;
}
- if (basic){
- basic = areBasicPredicates(steps[i].getPredicates());
- }
}
}
return basic;
@@ -159,21 +168,25 @@
if (isSimplePath()){
NodePointer ptr = (NodePointer)context.getSingleNodePointer();
- return SimplePathInterpreter.interpretPath(context, ptr, steps);
+ return SimplePathInterpreter.interpretSimpleLocationPath(context, ptr, steps);
}
else {
- for (int i = 0; i < steps.length; i++){
- context = createContextForStep(context, steps[i].getAxis(), steps[i].getNodeTest());
- Expression predicates[] = steps[i].getPredicates();
- if (predicates != null){
- for (int j = 0; j < predicates.length; j++){
- context = new PredicateContext(context, predicates[j]);
- }
+ return searchForPath(context);
+ }
+ }
+
+ private Pointer searchForPath(EvalContext context) {
+ for (int i = 0; i < steps.length; i++){
+ context = createContextForStep(context, steps[i].getAxis(), steps[i].getNodeTest());
+ Expression predicates[] = steps[i].getPredicates();
+ if (predicates != null){
+ for (int j = 0; j < predicates.length; j++){
+ context = new PredicateContext(context, predicates[j]);
}
}
-
- return context.getSingleNodePointer();
}
+
+ return context.getSingleNodePointer();
}
/**
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>