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