예제 #1
0
        public void TestIgnore()
        {
            CodeSweep.VSPackage.TaskProvider_Accessor accessor = new CodeSweep.VSPackage.TaskProvider_Accessor(_serviceProvider);

            Project project = Utilities.SetupMSBuildProject();

            Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            MockTermTable  table      = new MockTermTable("termtable.xml");
            MockTerm       term0      = new MockTerm("dupText", 0, "term0Class", "term0Comment", "term0recommended", table);
            MockTerm       term1      = new MockTerm("term2Text", 2, "term2Class", "term2Comment", "term2recommended", table);
            MockScanHit    hit0       = new MockScanHit("file0", 1, 5, "line text", term0, null);
            MockScanHit    hit1       = new MockScanHit("file1", 4, 1, "line text 2", term1, null);
            MockScanHit    hit2       = new MockScanHit("file2", 3, 2, "line text 3", term1, null);
            MockScanResult scanResult = new MockScanResult("file0", new IScanHit[] { hit0, hit1, hit2 }, true);

            accessor.AddResult(scanResult, project.FullPath);

            IVsEnumTaskItems enumerator = null;

            accessor.EnumTaskItems(out enumerator);
            List <IVsTaskItem> items = Utilities.TasksFromEnumerator(enumerator);

            CodeSweep.VSPackage.Task_Accessor task0Accessor = new CodeSweep.VSPackage.Task_Accessor(new PrivateObject(items[0]));
            CodeSweep.VSPackage.Task_Accessor task1Accessor = new CodeSweep.VSPackage.Task_Accessor(new PrivateObject(items[1]));

            MockTaskList taskList = _serviceProvider.GetService(typeof(SVsTaskList)) as MockTaskList;

            // Ensure cmd is disabled with no selection
            OleMenuCommandService mcs     = _serviceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
            MenuCommand           command = mcs.FindCommand(new CommandID(CodeSweep.VSPackage.GuidList_Accessor.guidVSPackageCmdSet, (int)CodeSweep.VSPackage.PkgCmdIDList_Accessor.cmdidIgnore));

            // NOTE: simply getting command.Supported or command.Enabled doesn't seem to invoke
            // QueryStatus, so I'll explicitly call the status update method as a workaround.
            accessor.QueryIgnore(null, EventArgs.Empty);

            Assert.IsTrue(command.Supported, "Command not supported.");
            Assert.IsFalse(command.Enabled, "Command enabled with no selection.");

            // Ensure cmd is disabled with an ignored item selected
            task0Accessor.Ignored = true;
            taskList.SetSelected(items[0], true);
            accessor.QueryIgnore(null, EventArgs.Empty);
            Assert.IsFalse(command.Enabled, "Command enabled with ignored item selected.");

            // Ensure cmd is enabled with one ignored and one non-ignored item selected
            taskList.SetSelected(items[1], true);
            accessor.QueryIgnore(null, EventArgs.Empty);
            Assert.IsTrue(command.Enabled, "Command disabled with a non-ignored item selected.");

            // Fire cmd, ensure selected items are ignored
            command.Invoke();
            accessor.QueryIgnore(null, EventArgs.Empty);
            Assert.IsTrue(task0Accessor.Ignored, "Command set ignored task to non-ignored.");
            Assert.IsTrue(task1Accessor.Ignored, "Command did not set non-ignored task to ignored.");

            // Ensure cmd is now disabled
            accessor.QueryIgnore(null, EventArgs.Empty);
            Assert.IsFalse(command.Enabled, "Command still enabled after invocation.");
        }
예제 #2
0
 public int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     // remove user deleted tasks
     // tasks.RemoveAll( delegate( Task t ) { return (t==null || t.isDeleted); });
     ppenum = new TaskEnumerator(tasks);
     return(0);
 }
        static public List <IVsTaskItem> TasksOfProvider(IVsTaskProvider provider)
        {
            IVsEnumTaskItems enumerator = null;

            provider.EnumTaskItems(out enumerator);
            return(TasksFromEnumerator(enumerator));
        }
예제 #4
0
        List <Task> SelectedTasks()
        {
            List <Task> result = new List <Task>();

            int          hr       = VSConstants.S_OK;
            IVsTaskList2 taskList = _serviceProvider.GetService(typeof(SVsTaskList)) as IVsTaskList2;

            IVsEnumTaskItems enumerator = null;

            hr = taskList.EnumSelectedItems(out enumerator);
            Debug.Assert(hr == VSConstants.S_OK, "EnumSelectedItems did not return S_OK.");

            IVsTaskItem[] items   = new IVsTaskItem[] { null };
            uint[]        fetched = new uint[] { 0 };
            for (enumerator.Reset(); enumerator.Next(1, items, fetched) == VSConstants.S_OK && fetched[0] == 1; /*nothing*/)
            {
                Task task = items[0] as Task;
                if (task != null)
                {
                    result.Add(task);
                }
            }

            return(result);
        }
        public override int EnumTaskItems(out IVsEnumTaskItems enumTaskItems)
        {
            // this will be called at the end of build.
            // return real enumerator, rather than calling async refresh
            var items = GetAllReportedTaskItems();

            enumTaskItems = new TaskItemsEnum <VisualStudioTaskItem>(items);
            return(VSConstants.S_OK);
        }
예제 #6
0
 public int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     lock (_itemsLock) {
         ppenum = new TaskEnum(_items
                               .Where(x => x.Key.Entry.FilePath != null) // don't report REPL window errors in the error list, you can't naviagate to them
                               .SelectMany(kv => kv.Value.Select(i => i.ToErrorTaskItem(kv.Key)))
                               .ToArray()
                               );
     }
     return(VSConstants.S_OK);
 }
        static public List <IVsTaskItem> TasksFromEnumerator(IVsEnumTaskItems enumerator)
        {
            List <IVsTaskItem> result = new List <IVsTaskItem>();

            IVsTaskItem[] items   = new IVsTaskItem[] { null };
            uint[]        fetched = new uint[] { 0 };

            for (enumerator.Reset(); enumerator.Next(1, items, fetched) == VSConstants.S_OK && fetched[0] == 1; /*nothing*/)
            {
                result.Add(items[0]);
            }

            return(result);
        }
예제 #8
0
        public Threading.Task SendErrorDetails(IVsTaskList errorList)
        {
            Threading.Task processTaskListTask = new System.Threading.Tasks.Task(() =>
            {
                _processorStopwatch.Start();

                IVsEnumTaskItems taskEnum = null;
                IVsTaskItem[] oneItem     = new IVsTaskItem[1];

                if (errorList != null)
                {
                    errorList.EnumTaskItems(out taskEnum);

                    if (taskEnum != null)
                    {
                        int maxItems = 10000;
                        Int32.TryParse(Properties.Resources.MaxErrorsToProcess, out maxItems);

                        taskEnum.Next(1, oneItem, null);
                        for (int i = 0; (i < maxItems) && (oneItem[0] != null); ++i)
                        {
                            ProcessTaskListItem(oneItem[0]);
                            taskEnum.Next(1, oneItem, null);
                        }

                        // send all events in case the Visual Studio instance is closed or solution unloaded
                        BuildTelemetryClient.FlushEvents();
                    }
                }

                _processorStopwatch.Stop();

                Dictionary <string, string> perfProperties = new Dictionary <string, string>();
                perfProperties.Add("BuildId", _currentBuildGuid.ToString());
                perfProperties.Add("ProjectId", _firstIslandwoodProjectGuid.ToString());

                Dictionary <string, double> perfMetrics = new Dictionary <string, double>();
                perfMetrics.Add("ProcessTasks", _processorStopwatch.ElapsedMilliseconds);

                BuildTelemetryClient.TrackEvent("IslandwoodBuildMonitorPerformance", perfProperties, perfMetrics);

                // reset state in case projects/solutions are unloaded before next build
                _firstIslandwoodProjectGuid = Guid.Empty;
            });

            processTaskListTask.Start();

            return(processTaskListTask);
        }
예제 #9
0
        public static IEnumerable <IVsTaskItem> AsEnumerable(this IVsEnumTaskItems items)
        {
            var item = new IVsTaskItem[1];

            while (true)
            {
                var hr = items.Next(1, item, null);
                ErrorHandler.ThrowOnFailure(hr);
                if (hr == VSConstants.S_FALSE)
                {
                    break;
                }

                yield return(item[0]);
            }
        }
예제 #10
0
        public static HashSet <string> CollectElementPathsFromToolWindowList(
            ToolWindowKind toolWindowKind)
        {
            HashSet <string> stringSet   = new HashSet <string>();
            IVsTaskList2     vsTaskList2 = (IVsTaskList2)null;

            switch (toolWindowKind)
            {
            case ToolWindowKind.ErrorList:
                vsTaskList2 = CoreUtility.ServiceProvider.GetService(typeof(SVsErrorList)) as IVsTaskList2;
                break;

            case ToolWindowKind.TaskList:
                vsTaskList2 = CoreUtility.ServiceProvider.GetService(typeof(SVsTaskList)) as IVsTaskList2;
                break;
            }
            IVsEnumTaskItems ppEnum = (IVsEnumTaskItems)null;

            if (vsTaskList2 != null && ErrorHandler.Succeeded(vsTaskList2.EnumSelectedItems(out ppEnum)))
            {
                IVsTaskItem[] rgelt        = new IVsTaskItem[1];
                uint[]        pceltFetched = new uint[1];
                while (ppEnum.Next(1U, rgelt, pceltFetched) == 0)
                {
                    if (rgelt != null && ((IEnumerable <IVsTaskItem>)rgelt).Count <IVsTaskItem>() > 0 && rgelt[0] != null)
                    {
                        string pbstrMkDocument = (string)null;
                        if (ErrorHandler.Succeeded(rgelt[0].Document(out pbstrMkDocument)) && !string.IsNullOrWhiteSpace(pbstrMkDocument))
                        {
                            if (pbstrMkDocument.EndsWith(".xpp", StringComparison.OrdinalIgnoreCase))
                            {
                                stringSet.Add(CoreUtility.GetService <IMetadataInfoProvider>().GetXmlArtifactFilePath(pbstrMkDocument));
                            }
                            else if (pbstrMkDocument.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
                            {
                                stringSet.Add(pbstrMkDocument);
                            }
                        }
                    }
                }
            }
            return(stringSet);
        }
예제 #11
0
        int IVsTaskProvider.EnumTaskItems(out IVsEnumTaskItems ppenum)
        {
            IList <CustomTask> list = null;

            // ask external source for items:
            if (RequestItems != null)
            {
                RequestItems(this, filter, out list);
            }

            if (list != null)
            {
                ppenum = new CustomTaskEnumerator(list, showIgnoredTasks);
            }
            else
            {
                ppenum = null;
            }

            return(VSConstants.S_OK);
        }
예제 #12
0
        private void IgnoreSelectedItems(bool ignore)
        {
            int          hr       = VSConstants.S_OK;
            IVsTaskList2 taskList = _serviceProvider.GetService(typeof(SVsTaskList)) as IVsTaskList2;

            IVsEnumTaskItems enumerator = null;

            hr = taskList.EnumSelectedItems(out enumerator);
            Debug.Assert(hr == VSConstants.S_OK, "EnumSelectedItems did not return S_OK.");

            IVsTaskItem[] items   = new IVsTaskItem[] { null };
            uint[]        fetched = new uint[] { 0 };
            for (enumerator.Reset(); enumerator.Next(1, items, fetched) == VSConstants.S_OK && fetched[0] == 1; /*nothing*/)
            {
                Task task = items[0] as Task;
                if (task != null)
                {
                    task.Ignored = ignore;
                }
            }

            Refresh();
        }
예제 #13
0
        public static IEnumerable <IVsTaskItem> AsEnumerable(this IVsEnumTaskItems items)
        {
            var item = new IVsTaskItem[1];

            while (true)
            {
                var hr = items.Next(1, item, null);
                ErrorHandler.ThrowOnFailure(hr);
                if (hr == VSConstants.S_FALSE)
                {
                    break;
                }

                // BEGIN WORKAROUND FOR https://github.com/dotnet/roslyn/issues/32121
                // Filter out items not belonging to a currently-open project
                if (ErrorHandler.Failed(((IVsErrorItem)item[0]).GetHierarchy(out _)))
                {
                    continue;
                }
                // END WORKAROUND FOR https://github.com/dotnet/roslyn/issues/32121

                yield return(item[0]);
            }
        }
예제 #14
0
 // IVsTaskProvider methods
 public void EnumTaskItems(out IVsEnumTaskItems ppEnum){
   ppEnum = new TaskEnumerator((TaskItem[])items.ToArray(typeof(TaskItem)));
 }
예제 #15
0
 public virtual void Clone (out IVsEnumTaskItems ppenum) {
   ppenum = new TaskEnumerator(this.items);
 }  
예제 #16
0
 // IVsTaskProvider methods
 public void EnumTaskItems(out IVsEnumTaskItems ppEnum)
 {
     ppEnum = new TaskEnumerator((TaskItem[])items.ToArray(typeof(TaskItem)));
 }
예제 #17
0
 public virtual void Clone(out IVsEnumTaskItems ppenum)
 {
     ppenum = new TaskEnumerator(this.items);
 }
예제 #18
0
        public override int EnumTaskItems(out IVsEnumTaskItems ppenum)
        {
            RefreshOrAddTasks(_todoItemMap.Values.SelectMany(x => x).ToArray());

            return base.EnumTaskItems(out ppenum);
        }
예제 #19
0
 /// <summary>
 /// The enum task items.
 /// </summary>
 /// <param name="ppenum">
 /// The ppenum.
 /// </param>
 /// <returns>
 /// The enum task items.
 /// </returns>
 /// <exception cref="Exception">
 /// </exception>
 public int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     throw new Exception("The method or operation is not implemented.");
 }
예제 #20
0
 public int Clone(out IVsEnumTaskItems newItems)
 {
     newItems = new VsEnumTaskItems(tasks);
     return(NativeMethods.S_OK);
 }
예제 #21
0
 int IVsEnumTaskItems.Clone(out IVsEnumTaskItems taskItemsEnum)
 {
     taskItemsEnum = new TaskItemsEnum <T>(_items);
     return(VSConstants.S_OK);
 }
예제 #22
0
 private int InternalEnumTaskItems(out IVsEnumTaskItems ppEnum)
 {
     ppEnum = new VsEnumTaskItems(this);
     return(NativeMethods.S_OK);
 }
예제 #23
0
 int IVsTaskProvider.EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     return(((IVsTaskProvider2)this).EnumTaskItems(out ppenum));
 }
 /// <summary>
 /// The enum selected items.
 /// </summary>
 /// <param name="ppEnum">
 /// The pp enum.
 /// </param>
 /// <returns>
 /// The enum selected items.
 /// </returns>
 public int EnumSelectedItems(out IVsEnumTaskItems ppEnum)
 {
     ppEnum = new MockTaskEnum(this._selection);
     return VSConstants.S_OK;
 }
 /// <summary>
 /// The enum task items.
 /// </summary>
 /// <param name="ppenum">
 /// The ppenum.
 /// </param>
 /// <returns>
 /// The enum task items.
 /// </returns>
 /// <exception cref="Exception">
 /// </exception>
 public int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     throw new Exception("The method or operation is not implemented.");
 }
예제 #26
0
 /// <include file='doc\TaskProvider.uex' path='docs/doc[@for="TaskProvider.IVsTaskProvider.EnumTaskItems"]/*' />
 /// <internalonly/>
 int IVsTaskProvider.EnumTaskItems(out IVsEnumTaskItems items)
 {
     items = new VsEnumTaskItems(Tasks);
     return(NativeMethods.S_OK);
 }
예제 #27
0
 public int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     // remove user deleted tasks 
     // tasks.RemoveAll( delegate( Task t ) { return (t==null || t.isDeleted); });
     ppenum = new TaskEnumerator(tasks);
     return 0;
 }
예제 #28
0
 /// <include file='doc\TaskProvider.uex' path='docs/doc[@for="TaskProvider.IVsTaskProvider2.EnumTaskItems"]/*' />
 /// <internalonly/>
 int IVsTaskProvider2.EnumTaskItems(out IVsEnumTaskItems items)
 {
     return(((IVsTaskProvider)this).EnumTaskItems(out items));
 }
예제 #29
0
 public int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     ppenum = new TaskEnumerator(_tasks, IsShowingIgnoredInstances);
     return(VSConstants.S_OK);
 }
예제 #30
0
 /// <summary>
 /// Creates a new enumerator with identical content to this one.
 /// </summary>
 /// <param name="ppenum">The newly created enumerator.</param>
 /// <returns>An HRESULT indicating the success of the operation.</returns>
 public int Clone(out IVsEnumTaskItems ppenum)
 {
     ppenum = new TaskEnumerator(_items, _showIgnored);
     return(VSConstants.S_OK);
 }
예제 #31
0
 // IVsTaskProvider methods
 public int EnumTaskItems(out IVsEnumTaskItems ppEnum){
   ppEnum = new TaskEnumerator((TaskItem[])items.ToArray(typeof(TaskItem)));
   return 0;
 }
예제 #32
0
 public int Clone(out IVsEnumTaskItems ppenum)
 {
     ppenum = new TaskEnum(_enumerable);
     return(VSConstants.S_OK);
 }
예제 #33
0
 public int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     ppenum = new TaskEnumerator(_tasks, IsShowingIgnoredInstances);
     return VSConstants.S_OK;
 }
예제 #34
0
 /// <summary>
 /// The enum selected items.
 /// </summary>
 /// <param name="ppEnum">
 /// The pp enum.
 /// </param>
 /// <returns>
 /// The enum selected items.
 /// </returns>
 public int EnumSelectedItems(out IVsEnumTaskItems ppEnum)
 {
     ppEnum = new MockTaskEnum(this._selection);
     return(VSConstants.S_OK);
 }
예제 #35
0
 /// <include file='doc\TaskProvider.uex' path='docs/doc[@for="TaskProvider.IVsTaskProvider2.EnumTaskItems"]/*' />
 /// <internalonly/>
 int IVsTaskProvider2.EnumTaskItems(out IVsEnumTaskItems items)
 {
     return ((IVsTaskProvider)this).EnumTaskItems(out items);
 }
예제 #36
0
 public virtual int Clone(out IVsEnumTaskItems ppenum)
 {
     ppenum = new TaskEnumerator(tasks);
     return 0;
 }
 public int Clone(out IVsEnumTaskItems ppenum)
 {
     ppenum = null;
     return VSConstants.E_NOTIMPL;
 }
예제 #38
0
 int IVsTaskProvider2.EnumTaskItems(out IVsEnumTaskItems ppEnum)
 {
     return(InternalEnumTaskItems(out ppEnum));
 }
 /// <summary>
 /// Creates a new enumerator with identical content to this one.
 /// </summary>
 /// <param name="ppenum">The newly created enumerator.</param>
 /// <returns>An HRESULT indicating the success of the operation.</returns>
 public int Clone(out IVsEnumTaskItems ppenum)
 {
     ppenum = new TaskEnumerator(_items, _showIgnored);
     return VSConstants.S_OK;
 }
예제 #40
0
 int IVsEnumTaskItems.Clone(out IVsEnumTaskItems ppEnum)
 {
     ppEnum = new VsEnumTaskItems(owner, items);
     return(NativeMethods.S_OK);
 }
예제 #41
0
        public override int EnumTaskItems(out IVsEnumTaskItems ppenum)
        {
            RefreshOrAddTasks(_todoItemMap.Values.SelectMany(x => x).ToArray());

            return(base.EnumTaskItems(out ppenum));
        }
예제 #42
0
 /// <include file='doc\TaskProvider.uex' path='docs/doc[@for="TaskProvider.IVsTaskProvider.EnumTaskItems"]/*' />
 /// <internalonly/>
 int IVsTaskProvider.EnumTaskItems(out IVsEnumTaskItems items)
 {
     items = new VsEnumTaskItems(Tasks);
     return NativeMethods.S_OK;
 }
예제 #43
0
 int IVsEnumTaskItems.Clone(out IVsEnumTaskItems ppenum)
 {
     ppenum = new CustomTaskEnumerator(items, showIgnored);
     return(VSConstants.S_OK);
 }
예제 #44
0
 public int Clone(out IVsEnumTaskItems newItems)
 {
     newItems = new VsEnumTaskItems(tasks);
     return NativeMethods.S_OK;
 }
 // This gets called once when we register, but shouldn't get called again 
 // except build case. in build case, VS will refresh all errors at the end of build
 public virtual int EnumTaskItems(out IVsEnumTaskItems ppenum)
 {
     ppenum = new EmptyVsEnumTaskItems();
     return VSConstants.S_OK;
 }