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>