]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/EnvironmentFactoryImpl.java
New SCL completion implementation
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / environment / EnvironmentFactoryImpl.java
index 04408726092b5f5d768d3992c4878ca635f05ae3..8940b7a82d76a55a72a36daa155aea0563b1f1a4 100644 (file)
@@ -12,20 +12,20 @@ import org.simantics.scl.compiler.module.repository.UpdateListener;
 
 public class EnvironmentFactoryImpl implements EnvironmentFactory {
 
-    private final ModuleRepository environment;
+    private final ModuleRepository repository;
     private final ImportDeclaration[] builtinImports;
     private final UpdateListener listener;
     
-    public EnvironmentFactoryImpl(ModuleRepository environment,
+    public EnvironmentFactoryImpl(ModuleRepository repository,
             ImportDeclaration[] builtinImports, UpdateListener listener) {
-        this.environment = environment;
+        this.repository = repository;
         this.builtinImports = builtinImports;
         this.listener = listener;
     }
     
     @Override
     public ModuleRepository getModuleRepository() {
-        return environment;
+        return repository;
     }
 
     @Override
@@ -43,7 +43,25 @@ public class EnvironmentFactoryImpl implements EnvironmentFactory {
                 acceptedBuiltinImports.toArray(new ImportDeclaration[acceptedBuiltinImports.size()]),
                 acceptedBuiltinImports.size() + imports.length);
         System.arraycopy(imports, 0, is, acceptedBuiltinImports.size(), imports.length);
-        return environment.createEnvironment(context, is, listener);
+        return repository.createEnvironment(context, is, listener);
+    }
+    
+    @Override
+    public Environment createEnvironmentRobustly(CompilationContext context, ImportDeclaration[] imports) {
+        ArrayList<ImportDeclaration> acceptedBuiltinImports = 
+                new ArrayList<ImportDeclaration>(builtinImports.length);
+        loop: for(ImportDeclaration builtinImport : builtinImports) {
+            for(ImportDeclaration decl : imports)
+                if(decl.moduleName.equals(builtinImport.moduleName) &&
+                        decl.localName.equals(builtinImport.localName))
+                    continue loop;
+            acceptedBuiltinImports.add(builtinImport);
+        }
+        ImportDeclaration[] is = Arrays.copyOf(
+                acceptedBuiltinImports.toArray(new ImportDeclaration[acceptedBuiltinImports.size()]),
+                acceptedBuiltinImports.size() + imports.length);
+        System.arraycopy(imports, 0, is, acceptedBuiltinImports.size(), imports.length);
+        return repository.createEnvironmentRobustly(context, is, listener);
     }
     
     @Override