Exemplo n.º 1
0
        public IEnumerable <SuggestedActionSet> GetSuggestedActions(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken)
        {
            var actionList      = new List <ISuggestedAction>();
            var currentSnapshot = range.Snapshot;

            var first = _agg.GetTags(range).FirstOrDefault();

            if (first != null)
            {
                actionList.Add(new RemoveDeadAnnotationSuggestedAction(currentSnapshot, first.Tag));
            }

            Program p;

            RefactoringUtil.GetExistingProgram(currentSnapshot.TextBuffer, out p);
            if (p == null)
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }
            var        tld = RefactoringUtil.GetTld(p);
            MemberDecl md;

            RefactoringUtil.GetMemberFromPosition(tld, range.Start, out md);
            if (md != null)
            {
                var methodSpan = RefactoringUtil.GetRangeOfMember(currentSnapshot, md);
                var tagSpans   = _agg.GetTags(methodSpan);
                var tags       = (from ts in tagSpans
                                  select new RemoveDeadAnnotationSuggestedAction(currentSnapshot, ts.Tag)).ToList();
                if (tags.Count > 0)
                {
                    actionList.Add(new RemoveMultipleDeadAnnotationsSuggestedAction(currentSnapshot.TextBuffer, tags, DeadAnnotationLocation.Block));
                }
            }

            var snapshotWideSpan = new SnapshotSpan(currentSnapshot, 0, currentSnapshot.Length);
            var allTags          = _agg.GetTags(snapshotWideSpan);
            var list             = allTags.Select(ts => new RemoveDeadAnnotationSuggestedAction(currentSnapshot, ts.Tag)).ToList();

            if (list.Count > 0)
            {
                actionList.Add(new RemoveMultipleDeadAnnotationsSuggestedAction(currentSnapshot.TextBuffer, list, DeadAnnotationLocation.File));
            }

            return(actionList.Count > 0 ?
                   new [] { new SuggestedActionSet(actionList.ToArray()) }
        : Enumerable.Empty <SuggestedActionSet>());
        }