private NamespaceDefinition HandleNamespaceDefinition(Cts.ModuleDesc parentScope, string namespaceString) { Debug.Assert(namespaceString != null); NamespaceDefinition result; NamespaceKey key = new NamespaceKey(parentScope, namespaceString); if (_namespaceDefs.TryGetValue(key, out result)) { return(result); } if (namespaceString.Length == 0) { var rootNamespace = new NamespaceDefinition { Name = null, }; _namespaceDefs.Add(key, rootNamespace); ScopeDefinition rootScope = HandleScopeDefinition(parentScope); rootScope.RootNamespaceDefinition = rootNamespace; rootNamespace.ParentScopeOrNamespace = rootScope; return(rootNamespace); } string currentNamespaceName = String.Empty; NamespaceDefinition currentNamespace = HandleNamespaceDefinition(parentScope, currentNamespaceName); foreach (var segment in namespaceString.Split('.')) { string nextNamespaceName = currentNamespaceName; if (nextNamespaceName.Length > 0) { nextNamespaceName = nextNamespaceName + '.'; } nextNamespaceName += segment; NamespaceDefinition nextNamespace; key = new NamespaceKey(parentScope, nextNamespaceName); if (!_namespaceDefs.TryGetValue(key, out nextNamespace)) { nextNamespace = new NamespaceDefinition { Name = HandleString(segment.Length == 0 ? null : segment), ParentScopeOrNamespace = currentNamespace }; _namespaceDefs.Add(key, nextNamespace); currentNamespace.NamespaceDefinitions.Add(nextNamespace); } currentNamespace = nextNamespace; currentNamespaceName = nextNamespaceName; } return(currentNamespace); }
private NamespaceReference HandleNamespaceReference(Cts.ModuleDesc parentScope, string namespaceString) { NamespaceReference result; NamespaceKey key = new NamespaceKey(parentScope, namespaceString); if (_namespaceRefs.TryGetValue(key, out result)) { return(result); } ScopeReference scope = HandleScopeReference(parentScope); NamespaceReference rootNamespace; key = new NamespaceKey(parentScope, null); if (!_namespaceRefs.TryGetValue(key, out rootNamespace)) { rootNamespace = new NamespaceReference { Name = null, ParentScopeOrNamespace = scope, }; _namespaceRefs.Add(key, rootNamespace); } NamespaceReference currentNamespace = rootNamespace; string currentNamespaceName = String.Empty; foreach (var segment in namespaceString.Split('.')) { string nextNamespaceName = currentNamespaceName; if (nextNamespaceName.Length > 0) { nextNamespaceName = nextNamespaceName + '.'; } nextNamespaceName += segment; NamespaceReference nextNamespace; key = new NamespaceKey(parentScope, nextNamespaceName); if (!_namespaceRefs.TryGetValue(key, out nextNamespace)) { nextNamespace = new NamespaceReference { Name = HandleString(segment.Length == 0 ? null : segment), ParentScopeOrNamespace = currentNamespace }; _namespaceRefs.Add(key, nextNamespace); } currentNamespace = nextNamespace; currentNamespaceName = nextNamespaceName; } return(currentNamespace); }
private NamespaceDefinition HandleNamespaceDefinition(Cts.ModuleDesc parentScope, string namespaceString) { NamespaceDefinition rootNamespace = HandleScopeDefinition(parentScope).RootNamespaceDefinition; if (String.IsNullOrEmpty(namespaceString)) { return(rootNamespace); } NamespaceDefinition result; NamespaceKey key = new NamespaceKey(parentScope, namespaceString); if (_namespaceDefs.TryGetValue(key, out result)) { return(result); } NamespaceDefinition currentNamespace = rootNamespace; string currentNamespaceName = String.Empty; foreach (var segment in namespaceString.Split('.')) { string nextNamespaceName = currentNamespaceName; if (nextNamespaceName.Length > 0) { nextNamespaceName = nextNamespaceName + '.'; } nextNamespaceName += segment; NamespaceDefinition nextNamespace; key = new NamespaceKey(parentScope, nextNamespaceName); if (!_namespaceDefs.TryGetValue(key, out nextNamespace)) { nextNamespace = new NamespaceDefinition { Name = HandleString(segment.Length == 0 ? null : segment), ParentScopeOrNamespace = currentNamespace }; _namespaceDefs.Add(key, nextNamespace); currentNamespace.NamespaceDefinitions.Add(nextNamespace); } currentNamespace = nextNamespace; currentNamespaceName = nextNamespaceName; } return(currentNamespace); }