Beispiel #1
0
 internal void AddNode(LibraryNode node)
 {
     lock (this) {
         // re-create root node here because we may have handed out the node before and don't want to mutate it's list.
         _root = _root.Clone();
         _root.AddNode(node);
         _updateCount++;
     }
 }
Beispiel #2
0
        private void ApplyUpdates(bool assumeLockHeld)
        {
            if (!assumeLockHeld)
            {
                if (!_searching.Wait(0))
                {
                    // Didn't get the lock immediately, which means we are
                    // currently searching. Once the search is done, updates
                    // will be applied.
                    return;
                }
            }

            try
            {
                lock (_updates)
                {
                    if (_updates.Count == 0)
                    {
                        return;
                    }

                    // re-create root node here because we may have handed out
                    // the node before and don't want to mutate it's list.
                    _root         = _root.Clone();
                    _updateCount += 1;
                    foreach (var kv in _updates)
                    {
                        switch (kv.Key)
                        {
                        case UpdateType.Add:
                            _root.AddNode(kv.Value);
                            break;

                        case UpdateType.Remove:
                            _root.RemoveNode(kv.Value);
                            break;

                        default:
                            Debug.Fail("Unsupported update type " + kv.Key.ToString());
                            break;
                        }
                    }
                    _updates.Clear();
                }
            }
            finally
            {
                if (!assumeLockHeld)
                {
                    _searching.Release();
                }
            }
        }
Beispiel #3
0
        private void CreateModuleTree(LibraryNode current, IScopeNode scope, string namePrefix, ModuleId moduleId)
        {
            if ((null == scope) || (null == scope.NestedScopes))
            {
                return;
            }

            foreach (IScopeNode subItem in scope.NestedScopes)
            {
                LibraryNode newNode       = CreateLibraryNode(current, subItem, namePrefix, moduleId.Hierarchy, moduleId.ItemID);
                string      newNamePrefix = namePrefix;

                current.AddNode(newNode);
                if ((newNode.NodeType & LibraryNodeType.Classes) != LibraryNodeType.None)
                {
                    newNamePrefix = namePrefix + newNode.Name + ".";
                }

                // Now use recursion to get the other types.
                CreateModuleTree(newNode, subItem, newNamePrefix, moduleId);
            }
        }