private DocumentSnapshot UpdateDocument(string filePath, SourceText sourceText)
        {
            ProjectSnapshotManager.DocumentChanged(HostProject.FilePath, filePath, sourceText);
            var project  = ProjectSnapshotManager.GetLoadedProject(HostProject.FilePath);
            var document = project.GetDocument(filePath);

            return(document);
        }
        internal void OnChange(ProjectChangeEventArgs e)
        {
            switch (e.Kind)
            {
            case ProjectChangeKind.DocumentAdded:
            {
                _project = _projectManager.GetLoadedProject(e.ProjectFilePath);
                Documents.Add(new DocumentItemViewModel(_projectManager, _project.GetDocument(e.DocumentFilePath), _errorHandler));
                break;
            }

            case ProjectChangeKind.DocumentRemoved:
            {
                _project = _projectManager.GetLoadedProject(e.ProjectFilePath);

                for (var i = Documents.Count - 1; i >= 0; i--)
                {
                    if (Documents[i].FilePath == e.DocumentFilePath)
                    {
                        Documents.RemoveAt(i);
                        break;
                    }
                }

                break;
            }

            case ProjectChangeKind.DocumentChanged:
            {
                _project = _projectManager.GetLoadedProject(e.ProjectFilePath);
                for (var i = Documents.Count - 1; i >= 0; i--)
                {
                    if (Documents[i].FilePath == e.DocumentFilePath)
                    {
                        Documents[i] = new DocumentItemViewModel(_projectManager, _project.GetDocument(e.DocumentFilePath), _errorHandler);
                        break;
                    }
                }

                break;
            }
            }
        }
        private void OnSelectedProjectChanged()
        {
            if (SelectedProject == null)
            {
                ProjectProperties = null;
                Directives        = null;
                Documents         = null;
                TagHelpers        = null;

                return;
            }

            var project = _projectManager.GetLoadedProject(_selectedProject.FilePath);

            ProjectProperties = new ProjectPropertyCollectionViewModel(project);
            Directives        = new DirectiveCollectionViewModel(project);
            Documents         = new DocumentCollectionViewModel(_projectManager, project, _errorHandler);
            TagHelpers        = new TagHelperCollectionViewModel(project, _errorHandler);
        }
        internal void ProjectManager_Changed(object sender, ProjectChangeEventArgs e)
        {
            // Don't do any work if the solution is closing
            if (e.SolutionIsClosing)
            {
                return;
            }

            _projectSnapshotManagerDispatcher.AssertDispatcherThread();

            if (_projectPath != null &&
                string.Equals(_projectPath, e.ProjectFilePath, StringComparison.OrdinalIgnoreCase))
            {
                // This will be the new snapshot unless the project was removed.
                _projectSnapshot = _projectManager.GetLoadedProject(e.ProjectFilePath);

                switch (e.Kind)
                {
                case ProjectChangeKind.DocumentAdded:
                case ProjectChangeKind.DocumentRemoved:
                case ProjectChangeKind.DocumentChanged:

                    // Nothing to do.
                    break;

                case ProjectChangeKind.ProjectAdded:
                case ProjectChangeKind.ProjectChanged:

                    // Just an update
                    _ = OnContextChangedAsync(ContextChangeKind.ProjectChanged);

                    if (e.Older is null ||
                        !Enumerable.SequenceEqual(e.Older.TagHelpers, e.Newer.TagHelpers))
                    {
                        _ = OnContextChangedAsync(ContextChangeKind.TagHelpersChanged);
                    }

                    break;

                case ProjectChangeKind.ProjectRemoved:

                    // Fall back to ephemeral project
                    _projectSnapshot = _projectManager.GetOrCreateProject(ProjectPath);
                    _ = OnContextChangedAsync(ContextChangeKind.ProjectChanged);
                    break;

                default:
                    throw new InvalidOperationException($"Unknown ProjectChangeKind {e.Kind}");
                }
            }
        }