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