1 package org.simantics.scl.compiler.source.repository;
3 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.ModuleSource;
12 import gnu.trove.procedure.TObjectProcedure;
13 import gnu.trove.set.hash.THashSet;
15 public class ClassModuleSourceRepository implements ModuleSourceRepository {
17 private final Class<?> clazz;
18 private final String path;
19 private final ClassLoader classLoader;
20 private final THashSet<String> modules = new THashSet<String>();
22 public ClassModuleSourceRepository(Class<?> clazz, ClassLoader classLoader, String path) throws IOException {
25 this.classLoader = classLoader;
26 URL url = clazz.getResource(path);
28 throw new IOException("Didn't find a folder " + path + " relative to the class " + clazz.getName() + ".");
29 ModuleBrowsingUtil.collectModuleSourcesAt(modules, url);
33 public ModuleSource getModuleSource(String moduleName,
34 UpdateListener listener) {
35 if(!modules.contains(moduleName))
37 return new ClassModuleSource(moduleName, clazz, classLoader, path + "/" + moduleName + ".scl", getBuiltinImports());
41 public Collection<String> getModuleNames() {
46 public void forAllModules(TObjectProcedure<String> procedure) {
47 modules.forEach(procedure);
50 protected ImportDeclaration[] getBuiltinImports() {
51 return ClassModuleSource.DEFAULT_IMPORTS;