1 package org.simantics.scl.compiler.environment;
3 import java.util.ArrayList;
4 import java.util.Collection;
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;
11 import gnu.trove.map.hash.THashMap;
13 public class ConcreteEnvironment extends AbstractEnvironment {
15 private final THashMap<String, Module> moduleMap;
16 private final Namespace localNamespace;
18 public ConcreteEnvironment(THashMap<String, Module> moduleMap,
19 Namespace localNamespace) {
20 this.moduleMap = moduleMap;
21 this.localNamespace = localNamespace;
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) {
33 else if(resultIsImmutable) {
34 result = new ArrayList<Constant>(result.size() + accessors.size());
35 result.addAll(accessors);
36 resultIsImmutable = false;
39 result.addAll(accessors);
46 public Namespace getLocalNamespace() {
47 return localNamespace;
51 protected Module getModule(String name) {
52 return moduleMap.get(name);
56 protected Collection<Module> getModules() {
57 return moduleMap.values();
61 public void collectRules(Collection<TransformationRule> rules) {
62 for(Module module : moduleMap.values())