bool CompareStrings(string s, string wildcardString) { if (s == null || wildcardString == null) { return(false); } return(WildcardsUtils.CreateRegex(wildcardString).IsMatch(s)); }
public Helper(Lazy <DbgManager> dbgManager, Lazy <AttachProgramOptionsProviderFactory, IAttachProgramOptionsProviderFactoryMetadata>[] attachProgramOptionsProviderFactories, string[] processNames, int[] processIds, string[] providerNames, CancellationToken cancellationToken) { if (attachProgramOptionsProviderFactories == null) { throw new ArgumentNullException(nameof(attachProgramOptionsProviderFactories)); } lockObj = new object(); result = new List <AttachableProcessImpl>(); providerInfos = new List <ProviderInfo>(); processProvider = new ProcessProvider(); this.dbgManager = dbgManager ?? throw new ArgumentNullException(nameof(dbgManager)); processNameRegexes = (processNames ?? Array.Empty <string>()).Select(a => WildcardsUtils.CreateRegex(a)).ToArray(); this.processIds = processIds ?? Array.Empty <int>(); if (providerNames == null) { providerNames = Array.Empty <string>(); } var providerContext = new AttachProgramOptionsProviderContext(processIds, IsValidProcess, cancellationToken); bool allFactories = providerNames.Length == 0; foreach (var lz in attachProgramOptionsProviderFactories) { if (providerNames.Length != 0 && Array.IndexOf(providerNames, lz.Metadata.Name) < 0) { continue; } var provider = lz.Value.Create(allFactories); if (provider == null) { continue; } providerInfos.Add(new ProviderInfo(this, providerContext, provider)); } if (providerInfos.Count == 0) { Task = System.Threading.Tasks.Task.FromResult(Array.Empty <AttachableProcess>()); } else { taskCompletionSource = new TaskCompletionSource <AttachableProcess[]>(); Task = taskCompletionSource.Task; lock (lockObj) { foreach (var info in providerInfos) { info.Start(); } } } }