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(CompilationContext context, ImportDeclaration[] imports) throws ImportFailureException {
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