--- /dev/null
+package org.simantics.scl.compiler.environment;\r
+\r
+import gnu.trove.map.hash.THashMap;\r
+\r
+import java.util.Map;\r
+\r
+import org.simantics.scl.compiler.environment.NamespaceImpl.ModuleImport;\r
+\r
+public class NamespaceSpec {\r
+ public final THashMap<String, NamespaceSpec> namespaceMap = new THashMap<String, NamespaceSpec>();\r
+ public final THashMap<String, ModuleImport> moduleMap = new THashMap<String, ModuleImport>();\r
+ \r
+ public Namespace toNamespace() {\r
+ THashMap<String, Namespace> namespaceImplMap = new THashMap<String, Namespace>(namespaceMap.size());\r
+ for(Map.Entry<String, NamespaceSpec> entry : namespaceMap.entrySet())\r
+ namespaceImplMap.put(entry.getKey(), entry.getValue().toNamespace());\r
+ \r
+ return new NamespaceImpl(namespaceImplMap, moduleMap.values().toArray(new ModuleImport[moduleMap.size()]));\r
+ }\r
+ \r
+ public NamespaceSpec getNamespace(String name) {\r
+ NamespaceSpec result = namespaceMap.get(name);\r
+ if(result == null) {\r
+ result = new NamespaceSpec();\r
+ namespaceMap.put(name, result);\r
+ }\r
+ return result;\r
+ }\r
+ \r
+ @Override\r
+ public String toString() {\r
+ StringBuilder b = new StringBuilder();\r
+ toString(b);\r
+ return b.toString();\r
+ }\r
+\r
+ private void toString(StringBuilder b) {\r
+ b.append('[');\r
+ boolean first = true;\r
+ for(String name : moduleMap.keySet()) {\r
+ if(first)\r
+ first = false;\r
+ else\r
+ b.append(", ");\r
+ b.append(name);\r
+ }\r
+ b.append("]{");\r
+ first = true;\r
+ for(Map.Entry<String, NamespaceSpec> entry : namespaceMap.entrySet()) {\r
+ if(first)\r
+ first = false;\r
+ else\r
+ b.append(", ");\r
+ b.append(entry.getKey());\r
+ b.append('=');\r
+ entry.getValue().toString(b);\r
+ }\r
+ b.append('}');\r
+ }\r
+}\r