Esempio n. 1
0
 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();
                        }
                    }
                }
            }