]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/EnvironmentFactoryImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / environment / EnvironmentFactoryImpl.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/EnvironmentFactoryImpl.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/EnvironmentFactoryImpl.java
new file mode 100644 (file)
index 0000000..2397691
--- /dev/null
@@ -0,0 +1,51 @@
+package org.simantics.scl.compiler.environment;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+\r
+import org.simantics.scl.compiler.module.ConcreteModule;\r
+import org.simantics.scl.compiler.module.ImportDeclaration;\r
+import org.simantics.scl.compiler.module.repository.ImportFailureException;\r
+import org.simantics.scl.compiler.module.repository.ModuleRepository;\r
+import org.simantics.scl.compiler.module.repository.UpdateListener;\r
+\r
+public class EnvironmentFactoryImpl implements EnvironmentFactory {\r
+\r
+    private final ModuleRepository environment;\r
+    private final ImportDeclaration[] builtinImports;\r
+    private final UpdateListener listener;\r
+    \r
+    public EnvironmentFactoryImpl(ModuleRepository environment,\r
+            ImportDeclaration[] builtinImports, UpdateListener listener) {\r
+        this.environment = environment;\r
+        this.builtinImports = builtinImports;\r
+        this.listener = listener;\r
+    }\r
+\r
+    @Override\r
+    public Environment createEnvironment(ImportDeclaration[] imports) throws ImportFailureException {\r
+        ArrayList<ImportDeclaration> acceptedBuiltinImports = \r
+                new ArrayList<ImportDeclaration>(builtinImports.length);\r
+        loop: for(ImportDeclaration builtinImport : builtinImports) {\r
+            for(ImportDeclaration decl : imports)\r
+                if(decl.moduleName.equals(builtinImport.moduleName) &&\r
+                        decl.localName.equals(builtinImport.localName))\r
+                    continue loop;\r
+            acceptedBuiltinImports.add(builtinImport);\r
+        }\r
+        ImportDeclaration[] is = Arrays.copyOf(\r
+                acceptedBuiltinImports.toArray(new ImportDeclaration[acceptedBuiltinImports.size()]),\r
+                acceptedBuiltinImports.size() + imports.length);\r
+        System.arraycopy(imports, 0, is, acceptedBuiltinImports.size(), imports.length);\r
+        return environment.createEnvironment(is, listener);\r
+    }\r
+    \r
+    @Override\r
+    public void addBuiltinDependencies(ConcreteModule module) {\r
+        for(ImportDeclaration decl : builtinImports) {\r
+            ImportDeclaration decl2 = new ImportDeclaration(decl.moduleName, null);\r
+            module.addDependency(decl2);\r
+        }\r
+    }\r
+\r
+}\r