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) ; }
- }
-
-}