]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepositories.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / module / repository / ModuleRepositories.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepositories.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepositories.java
new file mode 100644 (file)
index 0000000..3a39c4e
--- /dev/null
@@ -0,0 +1,47 @@
+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