import java.util.ArrayList;
import java.util.Arrays;
+import org.simantics.scl.compiler.compilation.CompilationContext;
import org.simantics.scl.compiler.module.ConcreteModule;
import org.simantics.scl.compiler.module.ImportDeclaration;
import org.simantics.scl.compiler.module.repository.ImportFailureException;
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 repository;
+ }
@Override
- public Environment createEnvironment(ImportDeclaration[] imports) throws ImportFailureException {
+ public Environment createEnvironment(CompilationContext context, ImportDeclaration[] imports) throws ImportFailureException {
+ 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.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) {
acceptedBuiltinImports.toArray(new ImportDeclaration[acceptedBuiltinImports.size()]),
acceptedBuiltinImports.size() + imports.length);
System.arraycopy(imports, 0, is, acceptedBuiltinImports.size(), imports.length);
- return environment.createEnvironment(is, listener);
+ return repository.createEnvironmentRobustly(context, is, listener);
}
@Override