< Summary

Information
Class: SwitchBlade.Services.InProcessProviderRunner
Assembly: SwitchBlade
File(s): D:\a\switchblade\switchblade\Services\InProcessProviderRunner.cs
Tag: 203_23722840422
Line coverage
100%
Covered lines: 24
Uncovered lines: 0
Coverable lines: 24
Total lines: 47
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
RunAsync()100%22100%

File(s)

D:\a\switchblade\switchblade\Services\InProcessProviderRunner.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Threading.Tasks;
 5using SwitchBlade.Contracts;
 6
 7namespace SwitchBlade.Services
 8{
 9    /// <summary>
 10    /// Runs non-UIA window providers in-process using parallel tasks.
 11    /// These providers are fast and do not leak memory, so in-process execution is safe.
 12    /// </summary>
 4713    public class InProcessProviderRunner(ILogger? logger = null) : IProviderRunner
 14    {
 4715        private readonly ILogger? _logger = logger;
 16
 17        /// <inheritdoc />
 18        public async Task RunAsync(
 19            IList<IWindowProvider> providers,
 20            IEnumerable<string> disabledPlugins,
 21            IEnumerable<string> handledProcesses,
 22            Action<IWindowProvider, List<WindowItem>> onResults)
 5223        {
 5224            var tasks = new List<Task>();
 25625            foreach (var provider in providers)
 5026            {
 5027                tasks.Add(Task.Run(() =>
 5028                {
 5029                    try
 5030                    {
 5031                        bool isDisabled = disabledPlugins.Contains(provider.PluginName);
 5032                        var results = isDisabled ? [] : provider.GetWindows().ToList();
 4833                        onResults(provider, results);
 4834                    }
 235                    catch (Exception ex)
 236                    {
 237                        _logger?.LogError($"Provider {provider.PluginName} failed during GetWindows()", ex);
 5038                        // Process empty results to clear stale data for this provider
 239                        onResults(provider, []);
 240                    }
 10041                }));
 5042            }
 43
 5244            await Task.WhenAll(tasks);
 5245        }
 46    }
 47}