private GeneratedCodeContainer Create(string filePath) { var codeContainer = new GeneratedCodeContainer(); codeContainer.GeneratedCodeChanged += (sender, args) => { var generatedCodeContainer = (GeneratedCodeContainer)sender; var latestDocument = generatedCodeContainer.LatestDocument; Task.Factory.StartNew(() => { if (!_projectSnapshotManager.IsDocumentOpen(filePath)) { // Document isn't opened, no need to notify the client return; } if (!_documentVersionCache.TryGetDocumentVersion(latestDocument, out var hostDocumentVersion)) { // Cache entry doesn't exist, document most likely was evicted from the cache/too old. return; } _csharpPublisher.Publish(filePath, args.NewText, hostDocumentVersion); }, CancellationToken.None, TaskCreationOptions.None, _foregroundDispatcher.ForegroundScheduler); }; return(codeContainer); }
private GeneratedCodeContainer Create(string filePath) { var codeContainer = new GeneratedCodeContainer(); codeContainer.GeneratedCodeChanged += (sender, args) => { var generatedCodeContainer = (GeneratedCodeContainer)sender; IReadOnlyList <TextChange> textChanges; if (args.NewText.ContentEquals(args.OldText)) { // If the content is equal then no need to update the underlying CSharp buffer. textChanges = Array.Empty <TextChange>(); } else { textChanges = args.NewText.GetTextChanges(args.OldText); } var latestDocument = generatedCodeContainer.LatestDocument; Task.Factory.StartNew(() => { if (!_projectSnapshotManager.IsDocumentOpen(filePath)) { // Document isn't opened, no need to notify the client return; } if (!_documentVersionCache.TryGetDocumentVersion(latestDocument, out var hostDocumentVersion)) { // Cache entry doesn't exist, document most likely was evicted from the cache/too old. return; } var request = new UpdateCSharpBufferRequest() { HostDocumentFilePath = filePath, Changes = textChanges, HostDocumentVersion = hostDocumentVersion, }; _server.Value.Client.SendRequest("updateCSharpBuffer", request); }, CancellationToken.None, TaskCreationOptions.None, _foregroundDispatcher.ForegroundScheduler); }; return(codeContainer); }