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