public IEnumerable <SuggestedActionSet> GetSuggestedActions(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken) { //TextExtent extent; APICheckerWindowTaskProvider taskProvider = APICheckerWindowTaskProvider.GetTaskProvider(); if (taskProvider == null) { return(Enumerable.Empty <SuggestedActionSet>()); } int line = range.Start.GetContainingLine().LineNumber; foreach (Microsoft.VisualStudio.Shell.Task task in taskProvider.Tasks) { if ((task.Line == line) && (task is APICheckerTask)) { if (task is NeedsPrivilegeTask) { var addPrivilegeAction = new AddPrivilegeAction((NeedsPrivilegeTask)task); return(new SuggestedActionSet[] { new SuggestedActionSet( "addPrivilegeAction", new ISuggestedAction[] { addPrivilegeAction }, "addPrivilegeAction", SuggestedActionSetPriority.None, null) }); } //TODO: Handle Unused Privilege QuickFix } } return(Enumerable.Empty <SuggestedActionSet>()); }
public void Invoke(CancellationToken cancellationToken) { xmlDoc.Save(m_task.GetManifestFilePath()); APICheckerWindowTaskProvider taskProvider = APICheckerWindowTaskProvider.GetTaskProvider(); List <NeedsPrivilegeTask> removedTasks = new List <NeedsPrivilegeTask>(); TaskCollection Tasks = APICheckerWindowTaskProvider.GetTaskProvider().Tasks; List <string> privileges = m_task.GetRequiredPrivileges().ToList(); foreach (var task in Tasks) { if (task is NeedsPrivilegeTask) { NeedsPrivilegeTask privTask = (NeedsPrivilegeTask)task; int initPrivilegeCount = privTask.GetRequiredPrivileges().Count; foreach (var privilge in privileges) { if (privTask.GetRequiredPrivileges().Contains(privilge)) { privTask.GetRequiredPrivileges().Remove(privilge); } } int finalCount = privTask.GetRequiredPrivileges().Count; if (initPrivilegeCount != finalCount) { if (finalCount != 0) { taskProvider.ReportMissingPrivileges(privTask.GetRequiredPrivileges(), privTask.ApiName, privTask.Line, privTask.Column, privTask.FileName, privTask.GetManifestFilePath()); } removedTasks.Add(privTask); } } } foreach (var task in removedTasks) { Tasks.Remove(task); } }
public Task <bool> HasSuggestedActionsAsync(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken) { int line = range.Start.GetContainingLine().LineNumber; return(Task.Factory.StartNew(() => { APICheckerWindowTaskProvider taskProvider = APICheckerWindowTaskProvider.GetTaskProvider(); if (taskProvider == null) { return false; } foreach (Microsoft.VisualStudio.Shell.Task task in taskProvider.Tasks) { if (task.Line == line) { return true; } } return false; })); }