Exemplo n.º 1
0
        public static AttributedTypesTrieNode Read(BinaryReader reader, IPersistentIndexManager persistentIndexManager)
        {
            var root = new AttributedTypesTrieNode();

            if (!root.ReadThis(reader, persistentIndexManager))
            {
                return(null);
            }
            return(root);
        }
Exemplo n.º 2
0
        private AttributedTypesTrieNode EnsureNode(string attributeName)
        {
            AttributedTypesTrieNode node;

            if (!Roots.TryGetValue(attributeName, out node))
            {
                node = new AttributedTypesTrieNode();
                Roots.Add(attributeName, node);
            }
            return(node);
        }
Exemplo n.º 3
0
 private void UpdateIndex(AttributedTypesTrieNode node, OneToSetMap <IPsiSourceFile, AttributedTypesTrieNode> sourceFileToNodes)
 {
     foreach (var annotationData in node.Annotations)
     {
         sourceFileToNodes.Add(annotationData.SourceFile, node);
     }
     foreach (var childNode in node.Children.Values)
     {
         UpdateIndex(childNode, sourceFileToNodes);
     }
 }
Exemplo n.º 4
0
 public static IEnumerable <AttributedTypesTrieNode> Explore(this AttributedTypesTrieNode node, string[] names)
 {
     foreach (var name in names)
     {
         node = node.GetChild(name);
         if (node == null)
         {
             yield break;
         }
         yield return(node);
     }
 }
Exemplo n.º 5
0
        public static IEnumerable <AttributedTypesTrieNode> Enumerate(this AttributedTypesTrieNode node)
        {
            yield return(node);

            foreach (var child in node.Children)
            {
                foreach (var ret in Enumerate(child.Value))
                {
                    yield return(ret);
                }
            }
        }
Exemplo n.º 6
0
        public void Read(BinaryReader reader, IPersistentIndexManager persistentIndexManager)
        {
            var num = reader.ReadInt32();

            for (int i = 0; i < num; i++)
            {
                var name = reader.ReadString();
                var trie = AttributedTypesTrieNode.Read(reader, persistentIndexManager) ?? new AttributedTypesTrieNode();
                // direct add to roots here... no collisions by name is guaranted
                Roots.Add(name, trie);
            }
        }
Exemplo n.º 7
0
        private AttributedTypesTrieNode AddNamespaceNode(string namespaceShortName)
        {
            AttributedTypesTrieNode ret;

            if (Children.TryGetValue(namespaceShortName, out ret))
            {
                return(ret);
            }
            ret = new AttributedTypesTrieNode();
            Children.Add(namespaceShortName, ret);
            return(ret);
        }
Exemplo n.º 8
0
        private void UpdateIndexAfterLoad(AttributedTypesTrieNode trieNode)
        {
            foreach (var annotationData in trieNode.Annotations)
            {
                mySourceFileToNodes.Add(annotationData.SourceFile, trieNode);
            }

            foreach (var childNode in trieNode.Children.Values)
            {
                UpdateIndexAfterLoad(childNode);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// return true when some data was added
        /// </summary>
        public bool Merge(AttributedTypesTrieNode builtPart, OneToSetMap <IPsiSourceFile, AttributedTypesTrieNode> sourceFileToNodes)
        {
            var ret = false;

            if (builtPart.myAnnotations != null && builtPart.myAnnotations.Count > 0)
            {
                ret = true;
                foreach (var data in builtPart.myAnnotations)
                {
                    sourceFileToNodes.Add(data.SourceFile, this);
                }
            }

            if (myAnnotations == null && builtPart.myAnnotations != null)
            {
                myAnnotations = builtPart.myAnnotations;
            }
            else if (myAnnotations != null && builtPart.myAnnotations != null)
            {
                myAnnotations = myAnnotations.Concat(builtPart.myAnnotations).ToList();
            }

            if (builtPart.myChildren != null)
            {
                foreach (var child in builtPart.myChildren)
                {
                    AttributedTypesTrieNode ownChild;
                    var childTrie = child.Value;
                    if (Children.TryGetValue(child.Key, out ownChild))
                    {
                        ret = ownChild.Merge(childTrie, sourceFileToNodes) || ret;
                    }
                    else
                    {
                        Children[child.Key] = childTrie;
                        ret = true;
                        UpdateIndex(childTrie, sourceFileToNodes);
                    }
                }
            }
            return(ret);
        }