public IGherkinProcessingTask Merge(IGherkinProcessingTask other)
            {
                if (other is PingTask)
                {
                    return(this);
                }

                AnalyzingTask otherAnalyzingTask = other as AnalyzingTask;

                if (otherAnalyzingTask == null || languageService != otherAnalyzingTask.languageService)
                {
                    return(null);
                }

                if (otherAnalyzingTask.change.EntireScopeChanged)
                {
                    return(otherAnalyzingTask);
                }

                if (change.EntireScopeChanged)
                {
                    return(new AnalyzingTask(languageService, GherkinFileScopeChange.CreateEntireScopeChange(otherAnalyzingTask.change.GherkinFileScope)));
                }

                return(new AnalyzingTask(languageService, Merge(change, otherAnalyzingTask.change)));
            }
        private void EnqueueAnalyzingRequest(GherkinFileScopeChange scopeChange)
        {
            if (!AnalyzingEnabled)
            {
                return;
            }

            var task = new AnalyzingTask(this, scopeChange);

            projectScope.GherkinProcessingScheduler.EnqueueAnalyzingRequest(task);
            //            task.Apply(); // synchronous execution
        }
        private void EnqueueAnalyzingRequest(GherkinFileScopeChange scopeChange)
        {
            if (!AnalyzingEnabled)
                return;

            var task = new AnalyzingTask(this, scopeChange);

            projectScope.GherkinProcessingScheduler.EnqueueAnalyzingRequest(task);
            //            task.Apply(); // synchronous execution
        }