public void Execute(IDataContext context, DelegateExecute nextExecute)
        {
            if (!File.Exists(SimianOptions.Instance.PathToSimian))
            {
                MessageBox.Show("You need to configure the path to the Simian executable.  Configuration is located at Resharper->Options->Agent Ralph->Simian Explorer.");
                // TODO: Launch the R# config here.
                return;
            }

            // Get solution from context in which action is executed
            ISolution solution = context.GetData(IDE.DataConstants.SOLUTION);
            if (solution == null)
                return;

            List<FileSystemPath> files_to_analyze = CollectAllFilesToAnalyze(solution);

            if(files_to_analyze.Count == 0)
            {
                SimianResultsDescriptor d2 = new SimianResultsDescriptor(solution, new List<ISet>(), "Simian Explorer");

                // Show the results in the gui.
                TreeModelBrowser.GetInstance(solution).Show("SearchResultsWindow", d2,
                                                            new TreeModelBrowserPanel(d2));
                return;
            }

            string simian_xml_file = SimianUtil.RunSimianToXml(files_to_analyze, SimianOptions.Instance);
            try
            {
                SimianResultsParser parser = new SimianResultsParser(solution);
                IEnumerable<Set> sim_sets = parser.GetSimianResults2(simian_xml_file);

                // Get the initial explorer.
                SimianResultsDescriptor d2 = new SimianResultsDescriptor(solution, ToIListOfISet(sim_sets), "Simian Explorer");

                // Show the results in the gui.
                TreeModelBrowser.GetInstance(solution).Show("SearchResultsWindow", d2,
                                                            new TreeModelBrowserPanel(d2));

                // And the examiner produces the content of the 'Refactoring Candidates' explorer.
                Examiner examiner = new Examiner(solution);
                IList<ISet> l = examiner.Examine(sim_sets);

                if(l.Count == 0)
                    return;

                d2 = new SimianResultsDescriptor(solution, l, "The Inbetweens");

                // Show the results in the gui.
                TreeModelBrowser.GetInstance(solution).Show("SearchResultsWindow", d2,
                                                            new TreeModelBrowserPanel(d2));

                if (parser.FilesInError.Count > 0)
                {
                    using (SimianErrorFilesForm f = new SimianErrorFilesForm())
                    {
                        f.FilesInError = parser.FilesInError;
                        f.ShowDialog();
                    }
                }
            }
            finally
            {
                if (File.Exists(simian_xml_file))
                    File.Delete(simian_xml_file);
            }
        }
        public void Execute(IDataContext context, DelegateExecute nextExecute)
        {
            if (!File.Exists(SimianOptions.Instance.PathToSimian))
            {
                MessageBox.Show("You need to configure the path to the Simian executable.  Configuration is located at Resharper->Options->Agent Ralph->Simian Explorer.");
                // TODO: Launch the R# config here.
                return;
            }

            // Get solution from context in which action is executed
            ISolution solution = context.GetData(IDE.DataConstants.SOLUTION);

            if (solution == null)
            {
                return;
            }

            List <FileSystemPath> files_to_analyze = CollectAllFilesToAnalyze(solution);

            if (files_to_analyze.Count == 0)
            {
                SimianResultsDescriptor d2 = new SimianResultsDescriptor(solution, new List <ISet>(), "Simian Explorer");

                // Show the results in the gui.
                TreeModelBrowser.GetInstance(solution).Show("SearchResultsWindow", d2,
                                                            new TreeModelBrowserPanel(d2));
                return;
            }

            string simian_xml_file = SimianUtil.RunSimianToXml(files_to_analyze, SimianOptions.Instance);

            try
            {
                SimianResultsParser parser   = new SimianResultsParser(solution);
                IEnumerable <Set>   sim_sets = parser.GetSimianResults2(simian_xml_file);

                // Get the initial explorer.
                SimianResultsDescriptor d2 = new SimianResultsDescriptor(solution, ToIListOfISet(sim_sets), "Simian Explorer");

                // Show the results in the gui.
                TreeModelBrowser.GetInstance(solution).Show("SearchResultsWindow", d2,
                                                            new TreeModelBrowserPanel(d2));

                // And the examiner produces the content of the 'Refactoring Candidates' explorer.
                Examiner     examiner = new Examiner(solution);
                IList <ISet> l        = examiner.Examine(sim_sets);

                if (l.Count == 0)
                {
                    return;
                }

                d2 = new SimianResultsDescriptor(solution, l, "The Inbetweens");

                // Show the results in the gui.
                TreeModelBrowser.GetInstance(solution).Show("SearchResultsWindow", d2,
                                                            new TreeModelBrowserPanel(d2));


                if (parser.FilesInError.Count > 0)
                {
                    using (SimianErrorFilesForm f = new SimianErrorFilesForm())
                    {
                        f.FilesInError = parser.FilesInError;
                        f.ShowDialog();
                    }
                }
            }
            finally
            {
                if (File.Exists(simian_xml_file))
                {
                    File.Delete(simian_xml_file);
                }
            }
        }