X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fenvironment%2FEnvironmentFactoryImpl.java;h=8940b7a82d76a55a72a36daa155aea0563b1f1a4;hb=HEAD;hp=79009374813197eb8aaa7529cd7d159302a57e30;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git 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 index 790093748..8940b7a82 100644 --- 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 @@ -3,6 +3,7 @@ package org.simantics.scl.compiler.environment; 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; @@ -11,19 +12,42 @@ 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 repository; + } @Override - public Environment createEnvironment(ImportDeclaration[] imports) throws ImportFailureException { + public Environment createEnvironment(CompilationContext context, ImportDeclaration[] imports) throws ImportFailureException { + ArrayList acceptedBuiltinImports = + new ArrayList(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 acceptedBuiltinImports = new ArrayList(builtinImports.length); loop: for(ImportDeclaration builtinImport : builtinImports) { @@ -37,7 +61,7 @@ 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(is, listener); + return repository.createEnvironmentRobustly(context, is, listener); } @Override