Exemple #1
0
        public void ScanProfile(IValidationProfile profile)
        {
            EditorApplication.delayCall += () =>
            {
                var results = new List <ValidationProfileResult>();
                this.validationProfileTree.CleanProfile(profile);

                try
                {
                    foreach (var result in profile.Validate(this.runner))
                    {
                        this.validationProfileTree.AddResultToTree(result);
                        results.Add(result);

                        if (GUIHelper.DisplaySmartUpdatingCancellableProgressBar(result.Profile.Name, result.Name, result.Progress))
                        {
                            break;
                        }
                    }
                }
                finally
                {
                    EditorUtility.ClearProgressBar();
                    this.overview.ProfileResults = results;
                    this.overview.Update();
                    this.validationProfileTree.MarkDirty();
                    this.validationProfileTree.UpdateMenuTree();
                    this.validationProfileTree.AddErrorAndWarningIcons();
                }
            };
        }
        public void OnHookExecuting()
        {
            using (var runner = new ValidationRunner())
            {
                bool stopTriggeringEvent = false;

                try
                {
                    foreach (var validation in this.Validations)
                    {
                        bool openValidatorWindow = false;
                        IValidationProfile actuallyFailingProfile = null;

                        try
                        {
                            foreach (var profile in validation.ProfilesToRun)
                            {
                                foreach (var result in profile.Validate(runner))
                                {
                                    if (GUIHelper.DisplaySmartUpdatingCancellableProgressBar("Executing Validation Hook: " + this.Name + " (Profile: " + profile.Name + ")", result.Name, result.Progress))
                                    {
                                        // Cancel validation
                                        return;
                                    }

                                    foreach (var subResult in result.Results)
                                    {
                                        bool couldExitFromFailure = false;

                                        if (subResult.ResultType == ValidationResultType.Error)
                                        {
                                            if (validation.HasActionFlag(AutomatedValidation.Action.LogError))
                                            {
                                                var source = result.GetSource() as UnityEngine.Object;
                                                Debug.LogError("Validation error on object '" + source + "', path '" + subResult.Path + "': " + subResult.Message, source);
                                            }

                                            if (validation.HasActionFlag(AutomatedValidation.Action.OpenValidatorIfError))
                                            {
                                                openValidatorWindow  = true;
                                                couldExitFromFailure = true;
                                            }

                                            if (validation.HasActionFlag(AutomatedValidation.Action.StopHookEventOnError))
                                            {
                                                stopTriggeringEvent  = true;
                                                couldExitFromFailure = true;
                                            }
                                        }
                                        else if (subResult.ResultType == ValidationResultType.Warning)
                                        {
                                            if (validation.HasActionFlag(AutomatedValidation.Action.LogWarning))
                                            {
                                                var source = result.GetSource() as UnityEngine.Object;
                                                Debug.LogWarning("Validation warning on object '" + source + "', path '" + subResult.Path + "': " + subResult.Message, source);
                                            }

                                            if (validation.HasActionFlag(AutomatedValidation.Action.OpenValidatorIfWarning))
                                            {
                                                openValidatorWindow  = true;
                                                couldExitFromFailure = true;
                                            }

                                            if (validation.HasActionFlag(AutomatedValidation.Action.StopHookEventOnWarning))
                                            {
                                                stopTriggeringEvent  = true;
                                                couldExitFromFailure = true;
                                            }
                                        }

                                        if (couldExitFromFailure)
                                        {
                                            actuallyFailingProfile = profile;

                                            if (!this.FinishValidationOnFailures)
                                            {
                                                return;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        finally
                        {
                            if (openValidatorWindow)
                            {
                                if (this.Hook is OnPlayValidationHook)
                                {
                                    stopTriggeringEvent = true;
                                }

                                this.OpenValidator(validation.ProfilesToRun, actuallyFailingProfile);
                            }

                            if (stopTriggeringEvent)
                            {
                                this.Hook.StopTriggeringEvent();
                            }
                        }
                    }
                }
                finally
                {
                    EditorUtility.ClearProgressBar();
                }
            }
        }