]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / query / QIf.java
1 package org.simantics.scl.compiler.elaboration.query;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;\r
4 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;\r
5 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
6 import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer;\r
7 import org.simantics.scl.compiler.elaboration.expressions.Variable;\r
8 import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;\r
9 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;\r
10 import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException;\r
11 import org.simantics.scl.compiler.errors.Locations;\r
12 import org.simantics.scl.compiler.types.Types;\r
13 \r
14 import gnu.trove.map.hash.TObjectIntHashMap;\r
15 import gnu.trove.set.hash.THashSet;\r
16 import gnu.trove.set.hash.TIntHashSet;\r
17 \r
18 public class QIf extends Query {\r
19     public Expression condition;\r
20     public Query thenQuery;\r
21     public Query elseQuery;\r
22     \r
23     public QIf(Expression condition, Query thenQuery, Query elseQuery) {\r
24         this.condition = condition;\r
25         this.thenQuery = thenQuery;\r
26         this.elseQuery = elseQuery;\r
27     }\r
28 \r
29     @Override\r
30     public void collectFreeVariables(THashSet<Variable> vars) {\r
31         condition.collectFreeVariables(vars);\r
32         thenQuery.collectFreeVariables(vars);\r
33         elseQuery.collectFreeVariables(vars);\r
34     }\r
35 \r
36     @Override\r
37     public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {\r
38         condition.collectRefs(allRefs, refs);\r
39         thenQuery.collectRefs(allRefs, refs);\r
40         elseQuery.collectRefs(allRefs, refs);\r
41     }\r
42 \r
43     @Override\r
44     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {\r
45         condition.collectVars(allVars, vars);\r
46         thenQuery.collectVars(allVars, vars);\r
47         elseQuery.collectVars(allVars, vars);\r
48     }\r
49 \r
50     @Override\r
51     public void checkType(TypingContext context) {\r
52         condition.checkType(context, Types.BOOLEAN);\r
53         thenQuery.checkType(context);\r
54         elseQuery.checkType(context);\r
55     }\r
56 \r
57     @Override\r
58     public void collectConstraints(ConstraintCollectionContext context) throws UnsolvableQueryException {\r
59         // TODO Auto-generated method stub\r
60         \r
61     }\r
62 \r
63     @Override\r
64     public Query replace(ReplaceContext context) {\r
65         return new QIf(\r
66                 condition.replace(context),\r
67                 thenQuery.replace(context),\r
68                 elseQuery.replace(context));\r
69     }\r
70 \r
71     @Override\r
72     public void setLocationDeep(long loc) {\r
73         if(location == Locations.NO_LOCATION) {\r
74             this.location = loc;\r
75             condition.setLocationDeep(loc);\r
76             elseQuery.setLocationDeep(loc);\r
77             thenQuery.setLocationDeep(loc);\r
78         }\r
79     }\r
80 \r
81     @Override\r
82     public void accept(QueryVisitor visitor) {\r
83         visitor.visit(this);\r
84     }\r
85 \r
86     @Override\r
87     public void forVariables(VariableProcedure procedure) {\r
88         condition.forVariables(procedure);\r
89         elseQuery.forVariables(procedure);\r
90         thenQuery.forVariables(procedure);\r
91     }\r
92     \r
93     @Override\r
94     public Query accept(QueryTransformer transformer) {\r
95         return transformer.transform(this);\r
96     }\r
97     \r
98 }\r