コード例 #1
0
ファイル: PythonLibraryManager.cs プロジェクト: wenh123/PTVS
        protected override void OnNewFile(LibraryTask task) {
            if (IsNonMemberItem(task.ModuleID.Hierarchy, task.ModuleID.ItemID)) {
                return;
            }
            IPythonProjectEntry item;
            if (task.TextBuffer == null || !task.TextBuffer.TryGetPythonProjectEntry(out item)) {
                item = task.ModuleID.Hierarchy
                    .GetProject()
                    .GetPythonProject()
                    .GetAnalyzer()
                    .AnalyzeFile(task.FileName) as IPythonProjectEntry;
            }

            if (item != null) {
                // We subscribe to OnNewAnalysis here instead of OnNewParseTree so that 
                // in the future we can use the analysis to include type information in the
                // object browser (for example we could include base type information with
                // links elsewhere in the object browser).
                item.OnNewAnalysis += (sender, args) => {
                    _package.GetUIThread().InvokeAsync(() => FileParsed(task, new AstScopeNode(item.Tree, item)))
                        .HandleAllExceptions(SR.ProductName, GetType())
                        .DoNotWait();
                };
            }
        }
コード例 #2
0
ファイル: LibraryManager.cs プロジェクト: PeezoSlug/PTVS
        /// <summary>
        /// Called by derived class when a file has been parsed.  The caller should
        /// provide the LibraryTask received from the OnNewFile call and an IScopeNode
        /// which represents the contents of the library.
        ///
        /// It is safe to call this method from any thread.
        /// </summary>
        protected void FileParsed(LibraryTask task)
        {
            try
            {
                var project = task.ModuleID.Hierarchy.GetProject()?.GetCommonProject();
                if (project == null)
                {
                    return;
                }

                HierarchyNode fileNode = fileNode = project.NodeFromItemId(task.ModuleID.ItemID);
                HierarchyInfo parent;
                if (fileNode == null || !_hierarchies.TryGetValue(task.ModuleID.Hierarchy, out parent))
                {
                    return;
                }

                LibraryNode module = CreateFileLibraryNode(
                    parent.ProjectLibraryNode,
                    fileNode,
                    System.IO.Path.GetFileName(task.FileName),
                    task.FileName
                    );

                // TODO: Creating the module tree should be done lazily as needed
                // Currently we replace the entire tree and rely upon the libraries
                // update count to invalidate the whole thing.  We could do this
                // finer grained and only update the changed nodes.  But then we
                // need to make sure we're not mutating lists which are handed out.

                if (null != task.ModuleID)
                {
                    LibraryNode previousItem = null;
                    lock (_files)
                    {
                        if (_files.TryGetValue(task.ModuleID, out previousItem))
                        {
                            _files.Remove(task.ModuleID);
                            parent.ProjectLibraryNode.RemoveNode(previousItem);
                        }
                    }
                }
                parent.ProjectLibraryNode.AddNode(module);
                _library.Update();
                if (null != task.ModuleID)
                {
                    lock (_files)
                    {
                        _files.Add(task.ModuleID, module);
                    }
                }
            }
            catch (COMException)
            {
                // we're shutting down and can't get the project
            }
        }
コード例 #3
0
ファイル: LibraryManager.cs プロジェクト: rkhjjs/VSGenero
 /// <summary>
 /// Overridden in the base class to receive notifications of when a file should
 /// be analyzed for inclusion in the library.  The derived class should queue
 /// the parsing of the file and when it's complete it should call FileParsed
 /// with the provided LibraryTask and an IScopeNode which provides information
 /// about the members of the file.
 /// </summary>
 protected virtual void OnNewFile(LibraryTask task)
 {
 }
コード例 #4
0
 /// <summary>
 /// Overridden in the base class to receive notifications of when a file should
 /// be analyzed for inclusion in the library.  The derived class should queue
 /// the parsing of the file and when it's complete it should call FileParsed
 /// with the provided LibraryTask and an IScopeNode which provides information
 /// about the members of the file.
 /// </summary>
 protected virtual void OnNewFile(LibraryTask task)
 {
 }
コード例 #5
0
        /// <summary>
        /// Called by derived class when a file has been parsed.  The caller should
        /// provide the LibraryTask received from the OnNewFile call and an IScopeNode
        /// which represents the contents of the library.
        /// 
        /// It is safe to call this method from any thread.
        /// </summary>
        protected void FileParsed(LibraryTask task)
        {
            try {
                var project = task.ModuleID.Hierarchy.GetProject().GetCommonProject();

                HierarchyNode fileNode = fileNode = project.NodeFromItemId(task.ModuleID.ItemID);
                HierarchyInfo parent;
                if (fileNode == null || !_hierarchies.TryGetValue(task.ModuleID.Hierarchy, out parent)) {
                    return;
                }

                LibraryNode module = CreateFileLibraryNode(
                    parent.ProjectLibraryNode,
                    fileNode,
                    System.IO.Path.GetFileName(task.FileName),
                    task.FileName
                );

                // TODO: Creating the module tree should be done lazily as needed
                // Currently we replace the entire tree and rely upon the libraries
                // update count to invalidate the whole thing.  We could do this
                // finer grained and only update the changed nodes.  But then we
                // need to make sure we're not mutating lists which are handed out.

                if (null != task.ModuleID) {
                    LibraryNode previousItem = null;
                    lock (_files) {
                        if (_files.TryGetValue(task.ModuleID, out previousItem)) {
                            _files.Remove(task.ModuleID);
                            parent.ProjectLibraryNode.RemoveNode(previousItem);
                        }
                    }
                }
                parent.ProjectLibraryNode.AddNode(module);
                _library.Update();
                if (null != task.ModuleID) {
                    lock (_files) {
                        _files.Add(task.ModuleID, module);
                    }
                }
            } catch (COMException) {
                // we're shutting down and can't get the project
            }
        }
コード例 #6
0
 protected override void OnNewFile(LibraryTask task) {
 }