package org.simantics.scl.compiler.environment;
-import gnu.trove.map.hash.THashMap;
-
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
+import org.simantics.scl.compiler.constants.Constant;
import org.simantics.scl.compiler.elaboration.rules.TransformationRule;
import org.simantics.scl.compiler.module.Module;
+import gnu.trove.map.hash.THashMap;
+
public class ConcreteEnvironment extends AbstractEnvironment {
private final THashMap<String, Module> moduleMap;
this.localNamespace = localNamespace;
}
+ @Override
+ public List<Constant> getFieldAccessors(String name) {
+ List<Constant> result = null;
+ boolean resultIsImmutable = true;
+ for(Module module : moduleMap.values()) {
+ List<Constant> accessors = module.getFieldAccessors(name);
+ if(accessors != null) {
+ if(result == null)
+ result = accessors;
+ else if(resultIsImmutable) {
+ result = new ArrayList<Constant>(result.size() + accessors.size());
+ result.addAll(accessors);
+ resultIsImmutable = false;
+ }
+ else
+ result.addAll(accessors);
+ }
+ }
+ return result;
+ }
+
@Override
public Namespace getLocalNamespace() {
return localNamespace;