You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/05/21 18:54:36 UTC

[16/23] jena git commit: Skip service. Replace ExprWalker. Use new walker for ExprTransformer.

Skip service. Replace ExprWalker.  Use new walker for ExprTransformer.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/10dbcf9c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/10dbcf9c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/10dbcf9c

Branch: refs/heads/master
Commit: 10dbcf9c3e0c89a692f183b22323ecb06ec8fa5e
Parents: 3c08cde
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Apr 25 13:32:01 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat May 21 18:29:13 2016 +0100

----------------------------------------------------------------------
 .../apache/jena/sparql/algebra/Transformer.java |  40 ++++---
 .../algebra/walker/ApplyTransformVisitor.java   |  24 ++--
 .../jena/sparql/algebra/walker/Walker.java      |  30 ++++-
 .../walker/WalkerVisitorSkipService.java        |   4 +-
 .../org/apache/jena/sparql/expr/ExprLib.java    |   3 +-
 .../org/apache/jena/sparql/expr/ExprList.java   |   4 +-
 .../jena/sparql/expr/ExprTransformer.java       |   1 -
 .../org/apache/jena/sparql/expr/ExprVars.java   |   7 +-
 .../org/apache/jena/sparql/expr/ExprWalker.java | 114 -------------------
 9 files changed, 74 insertions(+), 153 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
index 6982605..b724962 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
@@ -19,8 +19,10 @@
 package org.apache.jena.sparql.algebra;
 
 import org.apache.jena.sparql.algebra.op.OpService ;
+import org.apache.jena.sparql.algebra.walker.ApplyTransformVisitor ;
 import org.apache.jena.sparql.algebra.walker.Walker ;
 import org.apache.jena.sparql.expr.ExprTransform ;
+import org.apache.jena.sparql.expr.ExprTransformCopy ;
 
 /** A bottom-top application of a transformation of SPARQL algebra */  
 public class Transformer
@@ -67,25 +69,29 @@ public class Transformer
     }
 
     /** Transform an algebra expression except skip (leave alone) any OpService nodes */
-    public static Op transformSkipService(Transform opTransform, ExprTransform exprTransform, Op op, OpVisitor beforeVisitor,
-                                          OpVisitor afterVisitor) {
-
-        // XXX XXX Needs fixing
-//        if ( opTransform == null )
-//            opTransform = new TransformBase() ;
-//        if ( exprTransform == null )
-//            exprTransform = new ExprTransformCopy() ;
-//        Transform transform2 = new TransformSkipService(opTransform) ;
-//        ApplyTransformVisitor atv = new ApplyTransformVisitor(transform2, exprTransform, beforeVisitor, afterVisitor) ;
-//        WalkerVisitor wv = new WalkerVisitorSkipService(atv, atv, beforeVisitor, afterVisitor) ;
-//        return Walker.transform(op, atv) ;
-
-        // OLD
-        // Simplest way but still walks the OpService subtree (and throws away the
-        // transformation).
+    public static Op transformSkipService(Transform opTransform, ExprTransform exprTransform, Op op,
+                                          OpVisitor beforeVisitor, OpVisitor afterVisitor) {
+        
+        if ( true ) {
+            // XXX XXX Better work with Walker.
+            if ( opTransform == null )
+                opTransform = new TransformCopy() ;
+            if ( exprTransform == null )
+                exprTransform = new ExprTransformCopy() ;
+            Transform transform2 = new TransformSkipService(opTransform) ;
+            transform2 = opTransform ;
+            ApplyTransformVisitor atv = new ApplyTransformVisitor(transform2, exprTransform, false, beforeVisitor, afterVisitor) ;
+            return Walker.transformSkipService(op, atv, beforeVisitor, afterVisitor) ;
+        }
+        
         Transform transform = new TransformSkipService(opTransform) ;
         return Transformer.transform(transform, exprTransform, op, beforeVisitor, afterVisitor) ;
-        // XXX XXX Better to modify the walk and force the transform to be a no-op.
+//        // OLD
+//        // Simplest way but still walks the OpService subtree (and throws away the
+//        // transformation).
+//        Transform transform = new TransformSkipService(opTransform) ;
+//        return Transformer.transform(transform, exprTransform, op, beforeVisitor, afterVisitor) ;
+//        // XXX XXX Better to modify the walk and force the transform to be a no-op.
     }
 
     // To allow subclassing this class, we use a singleton pattern

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
index c58425b..126e985 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
@@ -38,7 +38,7 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
     private final Transform     opTransform ;
     private final ExprTransform exprTransform ;
 
-    protected boolean           visitService = true ;
+    protected final boolean     visitService ;
     
     private final Deque<Op>     opStack   = new ArrayDeque<>() ;
     private final Deque<Expr>   exprStack = new ArrayDeque<>() ;
@@ -46,14 +46,17 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
     private final OpVisitor     beforeVisitor ;
     private final OpVisitor     afterVisitor ;
 
-    public ApplyTransformVisitor(Transform opTransform, ExprTransform exprTransform, OpVisitor before, OpVisitor after) {
+    public ApplyTransformVisitor(Transform opTransform, ExprTransform exprTransform,
+                                 boolean visitService,
+                                 OpVisitor before, OpVisitor after) {
         this.opTransform = opTransform ;
         this.exprTransform = exprTransform ;
         this.beforeVisitor = before ;
         this.afterVisitor = after ;
+        this.visitService = visitService ;
     }
 
-    /*package*/ final Op opResult() {
+    public /*package*/ final Op opResult() {
         return pop(opStack) ;
     }
 
@@ -64,10 +67,8 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
     private static boolean ISOLATE = false ;
 
     protected Op transform(Op op) {
-        if ( ISOLATE ) {
-            ApplyTransformVisitor atv = new ApplyTransformVisitor(opTransform, exprTransform, beforeVisitor, afterVisitor) ;
-            return Walker.transform(op, atv, beforeVisitor, afterVisitor) ;
-        }
+        // XXX XXX
+        //if ( ISOLATE ) { }
         
         int x1 = opStack.size() ;
         int x2 = exprStack.size() ;
@@ -85,10 +86,9 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
     }
     
     protected Expr transform(Expr expr) {
-        if ( ISOLATE ) {
-            ApplyTransformVisitor atv = new ApplyTransformVisitor(opTransform, exprTransform, beforeVisitor, afterVisitor) ;
-            return Walker.transform(expr, atv, beforeVisitor, afterVisitor) ;
-        }
+        // XXX XXX
+        //if ( ISOLATE ) { }
+        
         int x1 = opStack.size() ;
         int x2 = exprStack.size() ;
         // reuse this ApplyTransformVisitor? with stack checking?
@@ -334,7 +334,7 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
     @Override
     public void visit(OpService op) {
         if ( ! visitService ) {
-            // No visit - push input.
+            // No visit - no transform - push input.
             push(opStack, op) ;
             return ;
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
index 766d5ab..2a31b4e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
@@ -51,11 +51,22 @@ public class Walker {
         walk$(op, opVisitor, exprVisitor, beforeVisitor, afterVisitor) ;
     }
     
+    public static void walkSkipService(Op op, OpVisitor opVisitor, ExprVisitor exprVisitor, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
+        if ( op == null )
+            return ;
+        walkSkipService$(op, opVisitor, exprVisitor, beforeVisitor, afterVisitor) ;
+    }
+
     private static void walk$(Op op, OpVisitor opVisitor, ExprVisitor exprVisitor, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
         WalkerVisitor wv = createWalker(opVisitor, exprVisitor, beforeVisitor, afterVisitor) ;
         walk$(op, wv) ;
     }
     
+    private static void walkSkipService$(Op op, OpVisitor opVisitor, ExprVisitor exprVisitor, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
+        WalkerVisitor wv = createWalkerSkipService(opVisitor, exprVisitor, beforeVisitor, afterVisitor) ;
+        walk$(op, wv) ;
+    }
+
     private static void walk$(Op op, WalkerVisitor walker) {
         walker.walk(op);
     }
@@ -129,7 +140,6 @@ public class Walker {
     }
     
     public static WalkerVisitor createWalker(OpVisitor opVisitor, ExprVisitor exprVisitor, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
-        
         if ( opVisitor == null )
             opVisitor = nullOpVisitor ;
         if ( exprVisitor == null )
@@ -137,6 +147,14 @@ public class Walker {
         return new WalkerVisitor(opVisitor, exprVisitor, beforeVisitor, afterVisitor)  ;
     }
     
+    public static WalkerVisitor createWalkerSkipService(OpVisitor opVisitor, ExprVisitor exprVisitor, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
+        if ( opVisitor == null )
+            opVisitor = nullOpVisitor ;
+        if ( exprVisitor == null )
+            exprVisitor = nullExprVisitor ;
+        return new WalkerVisitorSkipService(opVisitor, exprVisitor, beforeVisitor, afterVisitor)  ;
+    }
+
     /** Transform an algebra expression */
     public static Op transform(Op op, Transform transform) {
        return transform(op, transform, null) ;
@@ -150,7 +168,7 @@ public class Walker {
     
     /** Transform an {@link Op}. */
     public static Op transform(Op op, Transform opTransform, ExprTransform exprTransform, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
-        ApplyTransformVisitor v = createTransformer(opTransform, exprTransform) ;
+        ApplyTransformVisitor v = createTransformer(opTransform, exprTransform, beforeVisitor,afterVisitor) ;
         return transform(op, v, beforeVisitor, afterVisitor) ;
     }
 
@@ -165,6 +183,12 @@ public class Walker {
         return v.opResult() ;
     }
 
+    /** Transform an {@link Op}. */
+    public static Op transformSkipService(Op op, ApplyTransformVisitor v, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
+        walkSkipService(op, v, v, beforeVisitor, afterVisitor) ;
+        return v.opResult() ;
+    }
+
     /** Transform an expression */
     public static Expr transform(Expr expr, ExprTransform exprTransform) {
         return transform(expr, null, exprTransform) ;
@@ -200,7 +224,7 @@ public class Walker {
             opTransform = nullOpTransform ;
         if ( exprTransform == null )
             exprTransform = nullExprTransform ;
-        return new ApplyTransformVisitor(opTransform, exprTransform, null, null) ;
+        return new ApplyTransformVisitor(opTransform, exprTransform, true, null, null) ;
     }
 }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitorSkipService.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitorSkipService.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitorSkipService.java
index 9adc426..ebf0130 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitorSkipService.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitorSkipService.java
@@ -31,7 +31,9 @@ public class WalkerVisitorSkipService extends WalkerVisitor {
     
     @Override
     public void visit(OpService op) {
-        return ;
+        // Visit the op itself but not the subOp. 
+        if ( opVisitor != null )
+            op.visit(opVisitor) ;
     }
 }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprLib.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprLib.java
index 4553884..123b5e0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprLib.java
@@ -21,6 +21,7 @@ package org.apache.jena.sparql.expr;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.sparql.ARQInternalErrorException ;
 import org.apache.jena.sparql.algebra.optimize.ExprTransformConstantFold ;
+import org.apache.jena.sparql.algebra.walker.Walker ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.engine.binding.Binding ;
 import org.apache.jena.sparql.function.FunctionEnv ;
@@ -191,7 +192,7 @@ public class ExprLib
      */
     public static boolean isStable(Expr expr) {
         try {
-            ExprWalker.walk(exprVisitorCheckForNonFunctions, expr) ;
+            Walker.walk(expr, exprVisitorCheckForNonFunctions) ;
             return true ;
         } catch ( ExprUnstable ex ) {
             return false ;

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
index d386ca3..7662e0c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
@@ -19,6 +19,8 @@
 package org.apache.jena.sparql.expr;
 
 import java.util.* ;
+
+import org.apache.jena.sparql.algebra.walker.Walker ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.engine.ExecutionContext ;
 import org.apache.jena.sparql.engine.binding.Binding ;
@@ -109,7 +111,7 @@ public class ExprList implements Iterable<Expr>
         ExprBuild build = new ExprBuild(context) ;
         // Give each expression the chance to set up (bind functions)
         for (Expr expr : expressions)
-            ExprWalker.walk(build, expr) ;
+            Walker.walk(expr, build) ;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprTransformer.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprTransformer.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprTransformer.java
index f5e8d1f..970412d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprTransformer.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprTransformer.java
@@ -24,7 +24,6 @@ public class ExprTransformer
 {
     /** Transform an expression */
     public static Expr transform(ExprTransform transform, Expr expr)
-    //{ return get().transformation(transform, expr) ; }
     { return Walker.transform(expr, transform) ;}
 
     /** Transform an expression list */

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprVars.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprVars.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprVars.java
index d173682..17a034e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprVars.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprVars.java
@@ -24,6 +24,7 @@ import java.util.Set ;
 
 import org.apache.jena.query.SortCondition ;
 import org.apache.jena.sparql.algebra.OpVars ;
+import org.apache.jena.sparql.algebra.walker.Walker ;
 import org.apache.jena.sparql.core.Var ;
 
 public class ExprVars
@@ -56,7 +57,7 @@ public class ExprVars
                 }
             } ;
         ExprVarsWorker<Var> vv = new ExprVarsWorker<>(acc, action) ;
-        ExprWalker.walk(vv, expr) ;
+        Walker.walk(expr, vv) ;
     }
     
     public static void nonOpVarsMentioned(Collection<Var> acc, Expr expr)
@@ -70,7 +71,7 @@ public class ExprVars
                     }
                 } ;
         ExprNoOpVarsWorker<Var> vv = new ExprNoOpVarsWorker<>(acc, action) ;
-        ExprWalker.walk(vv, expr) ;
+        Walker.walk(expr, vv) ;
     }
     
     public static Set<String> getVarNamesMentioned(Expr expr)
@@ -91,7 +92,7 @@ public class ExprVars
                 }
             } ;
         ExprVarsWorker<String> vv = new ExprVarsWorker<>(acc, action) ;
-        ExprWalker.walk(vv, expr) ;
+        Walker.walk(expr, vv) ;
     }
     
     

http://git-wip-us.apache.org/repos/asf/jena/blob/10dbcf9c/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprWalker.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprWalker.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprWalker.java
deleted file mode 100644
index 2a29156..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprWalker.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.sparql.expr;
-/** Walk the expression tree, bottom up */
-public class ExprWalker 
-{
-    ExprVisitor visitor ;
-    
-    public ExprWalker(ExprVisitor visitor)
-    {
-        this.visitor = visitor ;
-    }
-    
-    public void walk(Expr expr) { expr.visit(visitor) ; }
-
-    static public void walk(ExprVisitor visitor, Expr expr)
-    {
-        if ( expr == null )
-            return ;
-        expr.visit(new WalkerBottomUp(visitor)) ;
-    }
-    
-//    static public void walk(ExprVisitor visitor, Expr expr)
-//    { expr.visit(new WalkerTopDown(visitor)) ; }
-
-    static class Walker extends ExprVisitorFunction
-    {
-        ExprVisitor visitor ;
-        boolean topDown = true ;
-        
-        private Walker(ExprVisitor visitor, boolean topDown)
-        { 
-            this.visitor = visitor ;
-            this.topDown = topDown ;
-        }
-        
-        @Override
-        protected void visitExprFunction(ExprFunction func)
-        {
-            if ( topDown )
-                func.visit(visitor) ;    
-            for ( int i = 1 ; i <= func.numArgs() ; i++ )
-            {
-                Expr expr = func.getArg(i) ;
-                if ( expr == null )
-                    // Put a dummy in, e.g. to keep the transform stack aligned.
-                    NodeValue.nvNothing.visit(this) ;
-                else
-                    expr.visit(this) ;
-            }
-            if ( !topDown )
-                func.visit(visitor) ;
-        }
-        
-//        @Override
-//        public void visit(ExprFunction3 func)
-//        {
-//            if ( topDown )
-//                func.visit(visitor) ; 
-//            // These are 2 or 3 args.  Put a dummy in. 
-//            func.getArg1().visit(this) ;
-//            func.getArg2().visit(this) ;
-//            if ( func.getArg3() == null )
-//                NodeValue.nvNothing.visit(this) ;
-//            else
-//                func.getArg3().visit(this) ;
-//            if ( !topDown )
-//                func.visit(visitor) ;
-//        }
-        
-        @Override
-        public void visit(ExprFunctionOp funcOp)
-        { funcOp.visit(visitor) ; }
-        
-        @Override
-        public void visit(NodeValue nv)         { nv.visit(visitor) ; }
-        @Override
-        public void visit(ExprVar v)            { v.visit(visitor) ; }
-        @Override
-        public void visit(ExprAggregator eAgg)    { eAgg.visit(visitor) ; }
-        
-    }
-    
-    // Visit current element then visit subelements
-    public static class WalkerTopDown extends Walker
-    {
-        private WalkerTopDown(ExprVisitor visitor)
-        { super(visitor, true) ; }
-    }
-
-    // Visit current element then visit subelements
-    public static class WalkerBottomUp extends Walker
-    {
-        private WalkerBottomUp(ExprVisitor visitor)
-        { super(visitor, false) ; }
-    }
-
-}