]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
index e3280daf6e731494e40f2e968093dea2e0aae9ea..c2a16f68151995defb0f4d02d7551ecf90df5f34 100644 (file)
@@ -1,7 +1,10 @@
 package org.simantics.scl.compiler.environment;
 
+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;
 
@@ -18,6 +21,27 @@ public class ConcreteEnvironment extends AbstractEnvironment {
         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;