]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/pre/PreQuery.java
(refs #7375) Replaced collectVars method by a visitor
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / query / pre / PreQuery.java
1 package org.simantics.scl.compiler.elaboration.query.pre;
2
3 import java.util.ArrayList;
4
5 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
6 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
7 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
8 import org.simantics.scl.compiler.elaboration.expressions.Variable;
9 import org.simantics.scl.compiler.elaboration.query.QConjunction;
10 import org.simantics.scl.compiler.elaboration.query.QExists;
11 import org.simantics.scl.compiler.elaboration.query.Query;
12 import org.simantics.scl.compiler.elaboration.query.QueryVisitor;
13 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
14
15 /**
16  * Query classes that may exist before resolving
17  */
18 public abstract class PreQuery extends Query {
19
20     public ArrayList<Variable> extraVariables = new ArrayList<Variable>(2);
21     public ArrayList<Query> sideQueries = new ArrayList<Query>(2);
22     
23     @Override
24     public void checkType(TypingContext context) {
25         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support checkType.");
26     }
27     
28     @Override
29     public void collectConstraints(ConstraintCollectionContext context) {
30         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support collectConstraints.");
31     }
32     
33     @Override
34     public Query replace(ReplaceContext replaceContext) {
35         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support replace.");
36     }
37     
38     @Override
39     final public void accept(QueryVisitor visitor) {
40         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support accept.");
41     }
42     
43     protected Query withSideQueries(Query query) {
44         if(!sideQueries.isEmpty()) {
45             sideQueries.add(query);
46             query = new QConjunction(sideQueries.toArray(new Query[sideQueries.size()]));
47         }
48         if(!extraVariables.isEmpty())
49             query = new QExists(extraVariables.toArray(new Variable[extraVariables.size()]), query);
50         return query;
51     }
52 }