public void DocumentChanged(string documentFilePath, SourceText sourceText, long textVersion)
        {
            if (documentFilePath == null)
            {
                throw new ArgumentNullException(nameof(documentFilePath));
            }

            if (sourceText == null)
            {
                throw new ArgumentNullException(nameof(sourceText));
            }

            _threadManager.AssertForegroundThread();

            var oldWorkspaceSnapshot = WorkspaceSnapshot;

            var newVersion = WorkspaceSnapshot.Version.GetNewerVersion();

            Debug.Assert(WorkspaceSnapshot.Documents.ContainsKey(documentFilePath));
            var docVersion  = WorkspaceSnapshot.Documents[documentFilePath].DocumentVersion.GetNewerVersion();
            var docSnapshot = new DocumentSnapshot(documentFilePath, textVersion, docVersion, sourceText);
            var newDocs     = WorkspaceSnapshot.Documents.SetItem(documentFilePath, docSnapshot);

            WorkspaceSnapshot = new WorkspaceSnapshot(newVersion, newDocs);

            NotifyListeners(new WorkspaceSnapshotChangeEventArgs(oldWorkspaceSnapshot, WorkspaceSnapshot, ProjectChangeKind.DocumentChanged));
        }
        public void DocumentAdded(string documentFilePath, TextLoader textLoader)
        {
            if (documentFilePath == null)
            {
                throw new ArgumentNullException(nameof(documentFilePath));
            }

            if (textLoader == null)
            {
                throw new ArgumentNullException(nameof(textLoader));
            }

            _threadManager.AssertForegroundThread();

            var oldWorkspaceSnapshot = WorkspaceSnapshot;

            var newVersion  = WorkspaceSnapshot.Version.GetNewerVersion();
            var docSnapshot = new DocumentSnapshot(documentFilePath, 0, VersionStamp.Default, textLoader);
            var newDocs     = WorkspaceSnapshot.Documents.SetItem(documentFilePath, docSnapshot);

            WorkspaceSnapshot = new WorkspaceSnapshot(newVersion, newDocs);

            NotifyListeners(new WorkspaceSnapshotChangeEventArgs(oldWorkspaceSnapshot, WorkspaceSnapshot, ProjectChangeKind.DocumentAdded));
            NotifyListeners(new WorkspaceSnapshotChangeEventArgs(oldWorkspaceSnapshot, WorkspaceSnapshot, ProjectChangeKind.DocumentChanged));
        }
        public void DocumentOpened(string documentFilePath, long textVersion, SourceText sourceText)
        {
            if (documentFilePath == null)
            {
                throw new ArgumentNullException(nameof(documentFilePath));
            }

            if (sourceText == null)
            {
                throw new ArgumentNullException(nameof(sourceText));
            }

            _threadManager.AssertForegroundThread();

            var oldWorkspaceSnapshot = WorkspaceSnapshot;

            _openFiles.Add(documentFilePath);
            var stamp       = VersionStamp.Default;
            var docSnapshot = new DocumentSnapshot(documentFilePath, textVersion, stamp, sourceText);
            var newDocs     = WorkspaceSnapshot.Documents.SetItem(documentFilePath, docSnapshot);
            var newVersion  = WorkspaceSnapshot.Version.GetNewerVersion();

            WorkspaceSnapshot = new WorkspaceSnapshot(newVersion, newDocs);

            NotifyListeners(new WorkspaceSnapshotChangeEventArgs(oldWorkspaceSnapshot, WorkspaceSnapshot, documentFilePath, ProjectChangeKind.DocumentChanged));
        }
Exemplo n.º 4
0
        public WorkspaceSnapshotChangeEventArgs(WorkspaceSnapshot older, WorkspaceSnapshot newer, ProjectChangeKind kind)
        {
            if (older == null && newer == null)
            {
                throw new ArgumentException("Both projects cannot be null.");
            }

            Older = older;
            Newer = newer;
            Kind  = kind;
        }
        public void DocumentClosed(string documentFilePath, TextLoader textLoader)
        {
            _threadManager.AssertForegroundThread();
            _openFiles.Remove(documentFilePath);

            var oldWorkspaceSnapshot = WorkspaceSnapshot;
            var oldDocSnapshot       = WorkspaceSnapshot.Documents[documentFilePath];
            var newDocSnapshot       = new DocumentSnapshot(documentFilePath, -1, oldDocSnapshot.DocumentVersion.GetNewerVersion(), textLoader);
            var newDocs    = WorkspaceSnapshot.Documents.SetItem(documentFilePath, newDocSnapshot);
            var newVersion = WorkspaceSnapshot.Version.GetNewerVersion();

            WorkspaceSnapshot = new WorkspaceSnapshot(newVersion, newDocs);

            NotifyListeners(new WorkspaceSnapshotChangeEventArgs(oldWorkspaceSnapshot, WorkspaceSnapshot, documentFilePath, ProjectChangeKind.DocumentChanged));
        }
        public void DocumentRemoved(string documentFilePath)
        {
            if (documentFilePath == null)
            {
                throw new ArgumentNullException(nameof(documentFilePath));
            }

            _threadManager.AssertForegroundThread();

            var oldWorkspaceSnapshot = WorkspaceSnapshot;
            var newDocs    = WorkspaceSnapshot.Documents.Remove(documentFilePath);
            var newVersion = WorkspaceSnapshot.Version.GetNewerVersion();

            WorkspaceSnapshot = new WorkspaceSnapshot(newVersion, newDocs);

            NotifyListeners(new WorkspaceSnapshotChangeEventArgs(oldWorkspaceSnapshot, WorkspaceSnapshot, ProjectChangeKind.DocumentRemoved));
            NotifyListeners(new WorkspaceSnapshotChangeEventArgs(oldWorkspaceSnapshot, WorkspaceSnapshot, ProjectChangeKind.DocumentChanged));
        }