public void Execute(Action <DaemonStageResult> committer)
        {
            MarkModulesAsUsed(collectUsagesStageProcess);

            var consumer           = new DefaultHighlightingConsumer(this, settingsStore);
            var referenceProcessor = new RecursiveReferenceProcessor <IMvcReference>(reference =>
            {
                InterruptableActivityCookie.CheckAndThrow();
                IHighlighting highlighting;
                switch (reference.MvcKind)
                {
                case MvcKind.Area:
                    highlighting = CheckArea(reference);
                    break;

                case MvcKind.Controller:
                    highlighting = CheckResolved(reference, _ => (IHighlighting) new MvcControllerHighlighting(_));
                    break;

                case MvcKind.Action:
                    highlighting = CheckResolved(reference, _ => (IHighlighting) new MvcActionHighlighting(_));
                    break;

                case MvcKind.View:
                case MvcKind.PartialView:
                case MvcKind.Master:
                case MvcKind.DisplayTemplate:
                case MvcKind.EditorTemplate:
                case MvcKind.Template:
                    highlighting = CheckResolved(reference,
                                                 _ => (IHighlighting) new MvcViewHighlighting((IMvcViewReference)_));
                    break;

                default:
                    highlighting = null;
                    break;
                }
                if (highlighting == null)
                {
                    return;
                }
                consumer.AddHighlighting(highlighting, GetMvcReferenceHighlightingRange(reference),
                                         reference.GetTreeNode().GetContainingFile());
            });

            foreach (IFile file in DaemonProcess.SourceFile.EnumerateDominantPsiFiles())
            {
                file.ProcessDescendants(referenceProcessor);
            }

            committer(new DaemonStageResult(consumer.Highlightings));
        }
        public void Execute(Action<DaemonStageResult> committer)
        {
            MarkModulesAsUsed(collectUsagesStageProcess);

            var consumer = new DefaultHighlightingConsumer(this, settingsStore);
            var referenceProcessor = new RecursiveReferenceProcessor<IMvcReference>(reference =>
            {
                InterruptableActivityCookie.CheckAndThrow();
                IHighlighting highlighting;
                switch (reference.MvcKind)
                {
                    case MvcKind.Area:
                        highlighting = CheckArea(reference);
                        break;
                    case MvcKind.Controller:
                        highlighting = CheckResolved(reference, _ => (IHighlighting)new MvcControllerHighlighting(_));
                        break;
                    case MvcKind.Action:
                        highlighting = CheckResolved(reference, _ => (IHighlighting)new MvcActionHighlighting(_));
                        break;
                    case MvcKind.View:
                    case MvcKind.PartialView:
                    case MvcKind.Master:
                    case MvcKind.DisplayTemplate:
                    case MvcKind.EditorTemplate:
                    case MvcKind.Template:
                        highlighting = CheckResolved(reference,
                            _ => (IHighlighting)new MvcViewHighlighting((IMvcViewReference)_));
                        break;
                    default:
                        highlighting = null;
                        break;
                }
                if (highlighting == null)
                {
                    return;
                }
                consumer.AddHighlighting(highlighting, GetMvcReferenceHighlightingRange(reference),
                    reference.GetTreeNode().GetContainingFile());
            });

            foreach (IFile file in DaemonProcess.SourceFile.EnumerateDominantPsiFiles())
            {
                file.ProcessDescendants(referenceProcessor);
            }

            committer(new DaemonStageResult(consumer.Highlightings));
        }