]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/Query.java
(refs #7375) Replaced collectFreeVariables method by a visitor
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / query / Query.java
index 5154495f5472dcdcb1b2e326673c6e9e3d9f3958..cea31bbe8d1ccbcf8d41bb6fbaf0ad2671f8a197 100644 (file)
@@ -1,11 +1,5 @@
 package org.simantics.scl.compiler.elaboration.query;
 
-import gnu.trove.map.hash.THashMap;
-import gnu.trove.map.hash.TIntObjectHashMap;
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.THashSet;
-import gnu.trove.set.hash.TIntHashSet;
-
 import java.util.ArrayList;
 import java.util.Set;
 
@@ -16,10 +10,12 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.EError;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer;
-import org.simantics.scl.compiler.elaboration.expressions.StandardExpressionVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectRefsVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.StandardExpressionVisitor;
 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.DerivateException;
 import org.simantics.scl.compiler.elaboration.query.compilation.DynamicProgrammingOrdering;
@@ -32,11 +28,14 @@ import org.simantics.scl.compiler.elaboration.relations.LocalRelation;
 import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
 
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.map.hash.TIntObjectHashMap;
+import gnu.trove.map.hash.TObjectIntHashMap;
+import gnu.trove.set.hash.TIntHashSet;
+
 public abstract class Query extends Symbol {
     public static final Query[] EMPTY_ARRAY = new Query[0];
     
-    public abstract void collectFreeVariables(THashSet<Variable> vars);
-    public abstract void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs);
     public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
     public abstract void checkType(TypingContext context);
     
@@ -135,8 +134,6 @@ public abstract class Query extends Symbol {
         });
     }
     
-    public abstract void forVariables(VariableProcedure procedure);
-    
     public TIntObjectHashMap<ArrayList<Query>> splitToPhases() {
         TIntObjectHashMap<ArrayList<Query>> result = new TIntObjectHashMap<ArrayList<Query>>(2);
         splitToPhases(result);
@@ -156,4 +153,11 @@ public abstract class Query extends Symbol {
     }
     
     public abstract Query accept(QueryTransformer transformer);
+    
+    public void forVariables(VariableProcedure procedure) {
+        accept(new ForVariablesUsesVisitor(procedure));
+    }
+    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+        accept(new CollectRefsVisitor(allRefs, refs));
+    }
 }