コード例 #1
0
        private void UpdateIssues(IEnumerable <IssueMarker> issueMarkers)
        {
            var oldSnapshot = this.Factory.CurrentSnapshot;
            var newSnapshot = new IssuesSnapshot(this.ProjectItem.ContainingProject.Name, this.FilePath, oldSnapshot.VersionNumber + 1, issueMarkers);

            SnapToNewSnapshot(newSnapshot);
        }
コード例 #2
0
        public IssueTagger(IIssueTracker issueTracker)
        {
            this.IssueTracker = issueTracker;
            this.issues       = issueTracker.LastIssues;

            issueTracker.AddTagger(this);
        }
コード例 #3
0
        private SnapshotSpan?CalculateAffectedSpan(IssuesSnapshot oldIssues, IssuesSnapshot newIssues)
        {
            // Calculate the whole span affected by the all of the issues, old and new
            int start = int.MaxValue;
            int end   = int.MinValue;

            if (oldIssues != null && oldIssues.Count > 0)
            {
                start = oldIssues.IssueMarkers.Select(i => i.Span.Start.TranslateTo(currentSnapshot, PointTrackingMode.Negative)).Min();
                end   = oldIssues.IssueMarkers.Select(i => i.Span.End.TranslateTo(currentSnapshot, PointTrackingMode.Positive)).Max();
            }

            if (newIssues != null && newIssues.Count > 0)
            {
                start = Math.Min(start, newIssues.IssueMarkers.Select(i => i.Span.Start.Position).Min());
                end   = Math.Max(end, newIssues.IssueMarkers.Select(i => i.Span.End.Position).Max());
            }

            if (start < end)
            {
                return(new SnapshotSpan(currentSnapshot, Span.FromBounds(start, end)));
            }

            return(null);
        }
コード例 #4
0
        private void UpdateMarkers(ITextSnapshot currentSnapshot, IssuesSnapshot snapshot)
        {
            var oldSnapshot = this.Snapshot;

            var handler = this.TagsChanged;

            if (handler == null)
            {
                return;
            }

            // Raise a single tags changed event over the entire affected span.
            int start = int.MaxValue;
            int end   = int.MinValue;

            if (oldSnapshot != null && oldSnapshot.Count > 0)
            {
                start = oldSnapshot.IssueMarkers.Select(i => i.Span.Start.TranslateTo(currentSnapshot, PointTrackingMode.Negative)).Min();
                end   = oldSnapshot.IssueMarkers.Select(i => i.Span.End.TranslateTo(currentSnapshot, PointTrackingMode.Positive)).Max();
            }

            if (snapshot.Count > 0)
            {
                start = Math.Min(start, snapshot.IssueMarkers.Select(i => i.Span.Start.Position).Min());
                end   = Math.Max(end, snapshot.IssueMarkers.Select(i => i.Span.End.Position).Max());
            }

            if (start < end)
            {
                handler(this, new SnapshotSpanEventArgs(new SnapshotSpan(currentSnapshot, Span.FromBounds(start, end))));
            }
        }
コード例 #5
0
        internal void UpdateIssues(IEnumerable <Issue> issues)
        {
            var oldSnapshot = this.Factory.CurrentSnapshot;
            var newMarkers  = issues.Where(IsValidIssueTextRange).Select(CreateIssueMarker);
            var newSnapshot = new IssuesSnapshot(this.ProjectItem.ContainingProject.Name, this.FilePath, oldSnapshot.VersionNumber + 1, newMarkers);

            SnapToNewSnapshot(newSnapshot);
        }
コード例 #6
0
        private void SnapToNewSnapshot(IssuesSnapshot snapshot)
        {
            this.Factory.UpdateMarkers(snapshot);

            provider.UpdateAllSinks();

            UpdateMarkers(currentSnapshot, snapshot);

            this.Snapshot = snapshot;
        }
コード例 #7
0
        public void UpdateMarkers(IssuesSnapshot newIssues, SnapshotSpan?affectedSpan)
        {
            this.issues = newIssues;

            var handler = this.TagsChanged;

            if (handler != null && affectedSpan.HasValue)
            {
                handler(this, new SnapshotSpanEventArgs(affectedSpan.Value));
            }
        }
コード例 #8
0
        internal /* for testing */ void HandleNewIssues(IEnumerable <IAnalysisIssueVisualization> issues)
        {
            var filteredIssues = RemoveSuppressedIssues(issues);

            // The text buffer might have changed since the analysis was triggered, so translate
            // all issues to the current snapshot.
            // See bug #1487: https://github.com/SonarSource/sonarlint-visualstudio/issues/1487
            var translatedIssues = TranslateSpans(filteredIssues, textBuffer.CurrentSnapshot);

            var newSnapshot = new IssuesSnapshot(GetProjectName(), GetProjectGuid(), FilePath, translatedIssues);

            SnapToNewSnapshot(newSnapshot);
        }
コード例 #9
0
        private void SnapToNewSnapshot(IssuesSnapshot newIssues)
        {
            // Tell our factory to snap to a new snapshot.
            this.Factory.UpdateSnapshot(newIssues);

            // Tell the provider to mark all the sinks dirty (so, as a side-effect, they will start an update pass that will get the new snapshot
            // from the factory).
            Provider.UpdateAllSinks();

            // Work out which part of the document has been affected by the changes, and tell
            // the taggers about the changes
            SnapshotSpan?affectedSpan = CalculateAffectedSpan(LastIssues, newIssues);

            foreach (var tagger in activeTaggers)
            {
                tagger.UpdateMarkers(newIssues, affectedSpan);
            }

            this.LastIssues = newIssues;
        }
コード例 #10
0
 internal void UpdateMarkers(IssuesSnapshot snapshot)
 {
     this.CurrentSnapshot = snapshot;
 }
コード例 #11
0
 public SnapshotFactory(IssuesSnapshot snapshot)
 {
     this.CurrentSnapshot = snapshot;
 }
コード例 #12
0
 public void UpdateSnapshot(IssuesSnapshot snapshot)
 {
     this.CurrentSnapshot = snapshot;
 }