Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }