]> gerrit.simantics Code Review - simantics/platform.git/blob
3a39c4e0e2252ecc823eb238e2ba33cf601aaaaa
[simantics/platform.git] /
1 package org.simantics.scl.compiler.module.repository;\r
2 \r
3 import gnu.trove.procedure.TObjectProcedure;\r
4 \r
5 import java.util.ArrayList;\r
6 import java.util.List;\r
7 import java.util.regex.Pattern;\r
8 \r
9 import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
10 import org.simantics.scl.compiler.environment.filter.AcceptAllNamespaceFilter;\r
11 import org.simantics.scl.compiler.errors.Failable;\r
12 import org.simantics.scl.compiler.module.Module;\r
13 \r
14 public class ModuleRepositories {\r
15     public static List<SCLValue> allValuesMatching(final ModuleRepository repository, String pattern) {\r
16         final Pattern compiledPattern = pattern == null ? null \r
17                 : Pattern.compile(".*" + pattern + ".*", Pattern.CASE_INSENSITIVE);\r
18         final ArrayList<SCLValue> results = new ArrayList<SCLValue>(); \r
19         repository.getSourceRepository().forAllModules(new TObjectProcedure<String>() {\r
20             @Override\r
21             public boolean execute(String moduleName) {\r
22                 Failable<Module> failableModule = repository.getModule(moduleName);\r
23                 if(!failableModule.didSucceed())\r
24                     return true;\r
25                 Module module = failableModule.getResult();\r
26                 module.findValuesForPrefix("", AcceptAllNamespaceFilter.INSTANCE, new TObjectProcedure<SCLValue>() {\r
27                     @Override\r
28                     public boolean execute(SCLValue value) {\r
29                         String name = value.getName().name;\r
30                         if(!value.isPrivate() && !name.startsWith("_") && !(name.contains("$") &&\r
31                                 Character.isLetter(name.charAt(0))) && \r
32                                 (compiledPattern == null || compiledPattern.matcher(name).matches())) {\r
33                             results.add(value);\r
34                         }\r
35                         return true;\r
36                     }\r
37                 });\r
38                 return true;\r
39             }\r
40         });\r
41         return results;\r
42     }\r
43     \r
44     public static List<SCLValue> allValues(ModuleRepository repository) {\r
45         return allValuesMatching(repository, null);\r
46     }\r
47 }\r