1 package org.simantics.scl.compiler.source.repository;
4 import java.io.IOException;
5 import java.util.Collection;
7 import org.simantics.scl.compiler.module.ImportDeclaration;
8 import org.simantics.scl.compiler.module.repository.UpdateListener;
9 import org.simantics.scl.compiler.source.ClassModuleSource;
10 import org.simantics.scl.compiler.source.FileModuleSource;
11 import org.simantics.scl.compiler.source.ModuleSource;
13 import gnu.trove.procedure.TObjectProcedure;
14 import gnu.trove.set.hash.THashSet;
16 public class FileModuleSourceRepository implements ModuleSourceRepository {
18 private final File path;
19 private final ClassLoader classLoader;
20 private final THashSet<String> modules = new THashSet<String>();
22 public FileModuleSourceRepository(File path, ClassLoader classLoader) throws IOException {
24 this.classLoader = classLoader;
25 ModuleBrowsingUtil.collectModuleSourcesAt(modules, path);
29 public ModuleSource getModuleSource(String moduleName,
30 UpdateListener listener) {
31 if(!modules.contains(moduleName))
33 return new FileModuleSource(moduleName, classLoader, new File(path, moduleName + ".scl"), getBuiltinImports());
37 public void forAllModules(TObjectProcedure<String> procedure) {
38 modules.forEach(procedure);
42 public Collection<String> getModuleNames() {
46 protected ImportDeclaration[] getBuiltinImports() {
47 return ClassModuleSource.DEFAULT_IMPORTS;