private static void ExecuteSingleProjectPredictor(
            ProjectInstance projectInstance,
            ValueAndTypeName <IProjectPredictor> projectPredictorAndName,
            IProjectPredictionCollector projectPredictionCollector)
        {
            var predictionReporter = new ProjectPredictionReporter(
                projectPredictionCollector,
                projectInstance,
                projectPredictorAndName.TypeName);

            projectPredictorAndName.Value.PredictInputsAndOutputs(
                projectInstance,
                predictionReporter);
        }
        private static void ExecuteAllPredictors(
            ProjectGraphNode projectGraphNode,
            ValueAndTypeName <IProjectPredictor>[] projectPredictors,
            ValueAndTypeName <IProjectGraphPredictor>[] projectGraphPredictors,
            IProjectPredictionCollector projectPredictionCollector)
        {
            ProjectInstance projectInstance = projectGraphNode.ProjectInstance;

            // Run the project predictors. Use single-threaded prediction since we're already parallelizing on projects.
            ProjectPredictionExecutor.ExecuteProjectPredictors(projectInstance, projectPredictors, projectPredictionCollector, maxDegreeOfParallelism: 1);

            // Run the graph predictors
            for (var i = 0; i < projectGraphPredictors.Length; i++)
            {
                var predictionReporter = new ProjectPredictionReporter(
                    projectPredictionCollector,
                    projectInstance,
                    projectGraphPredictors[i].TypeName);

                projectGraphPredictors[i].Value.PredictInputsAndOutputs(
                    projectGraphNode,
                    predictionReporter);
            }
        }