1 package org.simantics.scl.compiler.environment;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Arrays;
\r
6 import org.simantics.scl.compiler.module.ConcreteModule;
\r
7 import org.simantics.scl.compiler.module.ImportDeclaration;
\r
8 import org.simantics.scl.compiler.module.repository.ImportFailureException;
\r
9 import org.simantics.scl.compiler.module.repository.ModuleRepository;
\r
10 import org.simantics.scl.compiler.module.repository.UpdateListener;
\r
12 public class EnvironmentFactoryImpl implements EnvironmentFactory {
\r
14 private final ModuleRepository environment;
\r
15 private final ImportDeclaration[] builtinImports;
\r
16 private final UpdateListener listener;
\r
18 public EnvironmentFactoryImpl(ModuleRepository environment,
\r
19 ImportDeclaration[] builtinImports, UpdateListener listener) {
\r
20 this.environment = environment;
\r
21 this.builtinImports = builtinImports;
\r
22 this.listener = listener;
\r
26 public Environment createEnvironment(ImportDeclaration[] imports) throws ImportFailureException {
\r
27 ArrayList<ImportDeclaration> acceptedBuiltinImports =
\r
28 new ArrayList<ImportDeclaration>(builtinImports.length);
\r
29 loop: for(ImportDeclaration builtinImport : builtinImports) {
\r
30 for(ImportDeclaration decl : imports)
\r
31 if(decl.moduleName.equals(builtinImport.moduleName) &&
\r
32 decl.localName.equals(builtinImport.localName))
\r
34 acceptedBuiltinImports.add(builtinImport);
\r
36 ImportDeclaration[] is = Arrays.copyOf(
\r
37 acceptedBuiltinImports.toArray(new ImportDeclaration[acceptedBuiltinImports.size()]),
\r
38 acceptedBuiltinImports.size() + imports.length);
\r
39 System.arraycopy(imports, 0, is, acceptedBuiltinImports.size(), imports.length);
\r
40 return environment.createEnvironment(is, listener);
\r
44 public void addBuiltinDependencies(ConcreteModule module) {
\r
45 for(ImportDeclaration decl : builtinImports) {
\r
46 ImportDeclaration decl2 = new ImportDeclaration(decl.moduleName, null);
\r
47 module.addDependency(decl2);
\r