]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/RuleStatement.java
Merge "Ensure GetElementClassRequest is not constructed without elementFactory"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / block / RuleStatement.java
1 package org.simantics.scl.compiler.elaboration.expressions.block;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;\r
4 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;\r
5 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;\r
6 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
7 import org.simantics.scl.compiler.elaboration.query.Query;\r
8 import org.simantics.scl.compiler.errors.Locations;\r
9 \r
10 public class RuleStatement extends Statement {\r
11 \r
12     public Expression head;\r
13     public Query body;\r
14 \r
15     public RuleStatement(Expression head, Query body) {\r
16         this.head = head;\r
17         this.body = body;\r
18     }\r
19 \r
20     @Override\r
21     public Expression toExpression(EnvironmentalContext context, boolean monadic,\r
22             Expression in) {\r
23         throw new UnsupportedOperationException();\r
24     }\r
25     \r
26     @Override\r
27     public void setLocationDeep(long loc) {\r
28         if(location == Locations.NO_LOCATION) {\r
29             location = loc;\r
30             head.setLocationDeep(loc);\r
31             body.setLocationDeep(loc);\r
32         }\r
33     }\r
34     \r
35     @Override\r
36     public void resolvePattern(TranslationContext context) {\r
37         head = head.resolveAsPattern(context);\r
38     }\r
39     \r
40     @Override\r
41     public boolean mayBeRecursive() {\r
42         return true;\r
43     }\r
44     \r
45     @Override\r
46     public Statement replace(ReplaceContext context) {\r
47         return new RuleStatement(head.replaceInPattern(context), body.replace(context));\r
48     }\r
49     \r
50     @Override\r
51     public void accept(StatementVisitor visitor) {\r
52         visitor.visit(this);\r
53     }\r
54 \r
55     @Override\r
56     public StatementGroup getStatementGroup() {\r
57         return StatementGroup.Rule;\r
58     }\r
59 }\r