public override ICollection<IOccurence> Search(IProgressIndicator progressIndicator)
 {
     UnusedModulesProjectVisitor visitor = new UnusedModulesProjectVisitor(progressIndicator);
     using (ReadLockCookie cookie = ReadLockCookie.Create())
     {
         solution.Accept(visitor);
         emptyResult = visitor.GetTotalUnusedModules() == 0;
         results = visitor.GetSearchResults();
     }
     return EmptyArray<IOccurence>.Instance;
 }
        public UnusedReferencesSearchResult GetSearchResults()
        {
            UnusedReferencesSearchResult ret = new UnusedReferencesSearchResult();
            foreach (KeyValuePair<IProject, ICollection<IModuleReference>> pair in results)
            {
                if (pair.Value.Count > 0)
                    ret.Add(pair.Key, new List<IModuleReference>(pair.Value));
            }

            return ret;
        }
        ///<summary>
        ///
        ///            Initializes workflow with specified data context
        ///            
        ///</summary>
        ///
        public bool Initialize(IDataContext context, IInitializationContext initializationContext)
        {
            solution = context.GetData<ISolution>(JetBrains.ReSharper.DataConstants.SOLUTION);

            psiLanguageType = context.GetData<PsiLanguageType>(DataConstants.PSI_LANGUAGE_TYPE);

            Assert.CheckNotNull(solution);

            bool emptyResult = false;

            UnusedReferencesSearchRequest request = new UnusedReferencesSearchRequest(solution);
            UnusedReferencesSearchDescriptor searchDescriptor = new UnusedReferencesSearchDescriptor(request);
            using(ReadLockCookie cookie = ReadLockCookie.Create())
            {
                searchDescriptor.Search();
            }

            emptyResult = request.EmptyResult;
            searchResults = request.Results;
            if (searchDescriptor.Items == null)
                return false;

            if (emptyResult)
            {
                EmptyResultsPane panel = new EmptyResultsPane();
                page = panel;
            }
            else
            {
                ModulesChooserPane pane = new ModulesChooserPane(this);
                pane.AutoActivate = true;
                page = pane;
            }

            return true;
        }