]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/ConcreteEnvironment.java
(refs #6924) Support for record field access syntax.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / environment / ConcreteEnvironment.java
1 package org.simantics.scl.compiler.environment;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6
7 import org.simantics.scl.compiler.constants.Constant;
8 import org.simantics.scl.compiler.elaboration.rules.TransformationRule;
9 import org.simantics.scl.compiler.module.Module;
10
11 import gnu.trove.map.hash.THashMap;
12
13 public class ConcreteEnvironment extends AbstractEnvironment {
14
15     private final THashMap<String, Module> moduleMap;
16     private final Namespace localNamespace;
17     
18     public ConcreteEnvironment(THashMap<String, Module> moduleMap,
19             Namespace localNamespace) {
20         this.moduleMap = moduleMap;
21         this.localNamespace = localNamespace;
22     }
23
24     @Override
25     public List<Constant> getFieldAccessors(String name) {
26         List<Constant> result = null;
27         boolean resultIsImmutable = true;
28         for(Module module : moduleMap.values()) {
29             List<Constant> accessors = module.getFieldAccessors(name);
30             if(accessors != null) {
31                 if(result == null)
32                     result = accessors;
33                 else if(resultIsImmutable) {
34                     result = new ArrayList<Constant>(result.size() + accessors.size());
35                     result.addAll(accessors);
36                     resultIsImmutable = false;
37                 }   
38                 else
39                     result.addAll(accessors);
40             }
41         }
42         return result;
43     }
44
45     @Override
46     public Namespace getLocalNamespace() {
47         return localNamespace;
48     }
49
50     @Override
51     protected Module getModule(String name) {
52         return moduleMap.get(name);
53     }
54     
55     @Override
56     protected Collection<Module> getModules() {
57         return moduleMap.values();
58     }
59
60     @Override
61     public void collectRules(Collection<TransformationRule> rules) {
62         for(Module module : moduleMap.values())
63             module.getRules();
64     }
65
66 }