]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/NamespaceSpec.java
Merge remote-tracking branch 'origin/svn'
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / environment / NamespaceSpec.java
1 package org.simantics.scl.compiler.environment;\r
2 \r
3 import java.util.Map;\r
4 \r
5 import org.simantics.scl.compiler.environment.NamespaceImpl.ModuleImport;\r
6 \r
7 import gnu.trove.map.hash.THashMap;\r
8 \r
9 public class NamespaceSpec {\r
10     public final THashMap<String, NamespaceSpec> namespaceMap = new THashMap<String, NamespaceSpec>();\r
11     public final THashMap<String, ModuleImport> moduleMap = new THashMap<String, ModuleImport>();\r
12     \r
13     public Namespace toNamespace() {\r
14         THashMap<String, Namespace> namespaceImplMap = new THashMap<String, Namespace>(namespaceMap.size());\r
15         for(Map.Entry<String, NamespaceSpec> entry : namespaceMap.entrySet())\r
16             namespaceImplMap.put(entry.getKey(), entry.getValue().toNamespace());\r
17         \r
18         return new NamespaceImpl(namespaceImplMap, moduleMap.values().toArray(new ModuleImport[moduleMap.size()]));\r
19     }\r
20     \r
21     public NamespaceSpec getNamespace(String name) {\r
22         NamespaceSpec result = namespaceMap.get(name);\r
23         if(result == null) {\r
24             result = new NamespaceSpec();\r
25             namespaceMap.put(name, result);\r
26         }\r
27         return result;\r
28     }\r
29     \r
30     @Override\r
31     public String toString() {\r
32         StringBuilder b = new StringBuilder();\r
33         toString(b);\r
34         return b.toString();\r
35     }\r
36 \r
37     private void toString(StringBuilder b) {\r
38         b.append('[');\r
39         boolean first = true;\r
40         for(String name : moduleMap.keySet()) {\r
41             if(first)\r
42                 first = false;\r
43             else\r
44                 b.append(", ");\r
45             b.append(name);\r
46         }\r
47         b.append("]{");\r
48         first = true;\r
49         for(Map.Entry<String, NamespaceSpec> entry : namespaceMap.entrySet()) {\r
50             if(first)\r
51                 first = false;\r
52             else\r
53                 b.append(", ");\r
54             b.append(entry.getKey());\r
55             b.append('=');\r
56             entry.getValue().toString(b);\r
57         }\r
58         b.append('}');\r
59     }\r
60 }\r