private void SaveCopyData(ITextBuffer subjectBuffer) { var selection = view.Selection; var spans = selection.GetSnapshotSpansOnBuffer(subjectBuffer); if (spans.Count() != 1) { return; } var document = subjectBuffer.CurrentSnapshot.GetRelatedDocumentsWithChanges().FirstOrDefault(); if (document == null) { return; } if (document.SourceCodeKind != SourceCodeKind.Regular) { return; } var span = spans.Select(s => new Microsoft.CodeAnalysis.Text.TextSpan(s.Start, s.Length)).First(); if (span.IsEmpty) { return; } var text = document.GetTextAsync().Result.ToString().Substring(span.Start, span.Length); var offsetMap = CopyData.CreateOffsetMap(document, span); this.copyDataService.SaveData(new CopyData(text, offsetMap)); }
public bool CheckApplicable(ITextBuffer subjectBuffer, CopyData copyData) { if (copyData == null) { return(false); } var selection = view.Selection; var spans = selection.GetSnapshotSpansOnBuffer(subjectBuffer); if (spans.Count() != 1) { return(false); } var document = subjectBuffer.CurrentSnapshot.GetRelatedDocumentsWithChanges().FirstOrDefault(); if (document == null) { return(false); } if (document.SourceCodeKind != SourceCodeKind.Regular) { return(false); } var span = spans.Select(s => new TextSpan(s.Start, s.Length)).First(); var newSpan = new TextSpan(span.Start, copyData.Text.Length); var newDocument = ForkNewDocument(copyData, document, span); // analyze in new document var newOffsetMap = CopyData.CreateOffsetMap(newDocument, newSpan); foreach (var pair in copyData) { var offset = pair.Key; var token = pair.Value.Item1; var symbol = pair.Value.Item2; // check whether existing symbol is same one if (IsSameSymbol(offset, token, symbol, newOffsetMap)) { continue; } // missing using, } return(false); }