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=7444d4b3a2f3c25fac462d8a168898656dafd52e;hp=2397691cc09d5029976d0eaf60731878017a0f9b;hpb=969bd23cab98a79ca9101af33334000879fb60c5;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 2397691cc..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 @@ -1,51 +1,75 @@ -package org.simantics.scl.compiler.environment; - -import java.util.ArrayList; -import java.util.Arrays; - -import org.simantics.scl.compiler.module.ConcreteModule; -import org.simantics.scl.compiler.module.ImportDeclaration; -import org.simantics.scl.compiler.module.repository.ImportFailureException; -import org.simantics.scl.compiler.module.repository.ModuleRepository; -import org.simantics.scl.compiler.module.repository.UpdateListener; - -public class EnvironmentFactoryImpl implements EnvironmentFactory { - - private final ModuleRepository environment; - private final ImportDeclaration[] builtinImports; - private final UpdateListener listener; - - public EnvironmentFactoryImpl(ModuleRepository environment, - ImportDeclaration[] builtinImports, UpdateListener listener) { - this.environment = environment; - this.builtinImports = builtinImports; - this.listener = listener; - } - - @Override - public Environment createEnvironment(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 environment.createEnvironment(is, listener); - } - - @Override - public void addBuiltinDependencies(ConcreteModule module) { - for(ImportDeclaration decl : builtinImports) { - ImportDeclaration decl2 = new ImportDeclaration(decl.moduleName, null); - module.addDependency(decl2); - } - } - -} +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; +import org.simantics.scl.compiler.module.repository.ModuleRepository; +import org.simantics.scl.compiler.module.repository.UpdateListener; + +public class EnvironmentFactoryImpl implements EnvironmentFactory { + + private final ModuleRepository repository; + private final ImportDeclaration[] builtinImports; + private final UpdateListener listener; + + public EnvironmentFactoryImpl(ModuleRepository repository, + ImportDeclaration[] builtinImports, UpdateListener listener) { + this.repository = repository; + this.builtinImports = builtinImports; + this.listener = listener; + } + + @Override + public ModuleRepository getModuleRepository() { + return repository; + } + + @Override + 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) { + 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 + public void addBuiltinDependencies(ConcreteModule module) { + for(ImportDeclaration decl : builtinImports) { + ImportDeclaration decl2 = new ImportDeclaration(decl.moduleName, null); + module.addDependency(decl2); + } + } + +}