public List <MethodDeclarationInfo> FindMethods(string fileName, string[] searchFors, string[] searchForTypes, IProgressBar progress, IsCancelPendingDelegate isCancelPendingDelegate)
        {
            List <MethodDeclarationInfo> list = new List <MethodDeclarationInfo>();

            IAssembly assembly = this.LoadAssembly(fileName);

            if (assembly == null)
            {
                list.Add(new MethodDeclarationInfo(null, String.Format("Can't load assembly: {0}", fileName)));
                return(list);
            }
            if (!String.IsNullOrEmpty(assembly.Status))
            {
                list.Add(new MethodDeclarationInfo(null, String.Format("Error when loading assembly: {0} ({1})", fileName, assembly.Status)));
                return(list);
            }

            foreach (IModule module in assembly.Modules)
            {
                int count = 0;

                if (isCancelPendingDelegate != null && isCancelPendingDelegate())
                {
                    break;
                }

                if (progress != null)
                {
                    progress.InitProgress(0, module.Types.Count);
                    progress.SetProgress(0);
                }

                foreach (ITypeDeclaration typeDeclaration in module.Types)
                {
                    if (isCancelPendingDelegate != null && isCancelPendingDelegate())
                    {
                        break;
                    }

                    string typeName = typeDeclaration.Name;
                    if (searchForTypes != null)
                    {
                        foreach (string searchForType in searchForTypes)
                        {
                            if (typeName.IndexOf(searchForType, StringComparison.OrdinalIgnoreCase) >= 0)
                            {
                                FindMethods(typeDeclaration, searchFors, list);
                                break;
                            }
                        }
                    }
                    else
                    {
                        FindMethods(typeDeclaration, searchFors, list);
                    }

                    count++;
                    if (progress != null)
                    {
                        progress.SetProgress(count);
                    }
                }
            }

            return(list);
        }