package org.simantics.scl.compiler.module.repository; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.simantics.scl.compiler.elaboration.modules.SCLValue; import org.simantics.scl.compiler.environment.filter.AcceptAllNamespaceFilter; import org.simantics.scl.compiler.errors.Failable; import org.simantics.scl.compiler.module.Module; import gnu.trove.procedure.TObjectProcedure; public class ModuleRepositories { public static List allValuesMatching(final ModuleRepository repository, String pattern) { final Pattern compiledPattern = pattern == null ? null : Pattern.compile(".*" + pattern + ".*", Pattern.CASE_INSENSITIVE); final ArrayList results = new ArrayList(); repository.getSourceRepository().forAllModules(new TObjectProcedure() { @Override public boolean execute(String moduleName) { Failable failableModule = repository.getModule(moduleName); if(!failableModule.didSucceed()) return true; Module module = failableModule.getResult(); module.findValuesForPrefix("", AcceptAllNamespaceFilter.INSTANCE, new TObjectProcedure() { @Override public boolean execute(SCLValue value) { String name = value.getName().name; if(!value.isPrivate() && !name.startsWith("_") && !(name.contains("$") && Character.isLetter(name.charAt(0))) && (compiledPattern == null || compiledPattern.matcher(name).matches())) { results.add(value); } return true; } }); return true; } }); return results; } public static List allValues(ModuleRepository repository) { return allValuesMatching(repository, null); } }