예제 #1
0
        public GenerateResult Generate([NotNull] IDictionary <string, string> preferences)
        {
            var applyErrors = _preferencesManager.ApplyPreferences(preferences);

            var configuration = _preferencesManager.GetPreferenceInstance <ConfigurationGeneratorPreferences>();

            if (applyErrors.Any())
            {
                return(new GenerateResult(
                           generatedFiles: Enumerable.Empty <GeneratedFile>(),
                           errors: applyErrors.Select(p => new GenerationIssue(p.Code, "GenerationService", p.Detail))));
            }

            var result = _generator.GenerateConfigurations();

            var generatedFiles = new List <GeneratedFile>();

            foreach (var generatedFile in result.GeneratedFiles)
            {
                TokenUsageStatistics tokenUsageStatistics = _tokenUsageTracker.GetTokenUsageStatistics(generatedFile.Configuration);
                generatedFiles.Add(MapFileGenerationResults(generatedFile, tokenUsageStatistics, configuration));
            }

            return(new GenerateResult(
                       generatedFiles: generatedFiles,
                       errors: result.Errors.Select(e => e.ToGenerationIssue())));
        }
예제 #2
0
        public GeneratedFile MapFileGenerationResults(
            [NotNull] SingleFileGenerationResult result,
            [NotNull] TokenUsageStatistics tokenUsageStatistics,
            [NotNull] ConfigurationGeneratorPreferences configuration)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }
            if (tokenUsageStatistics == null)
            {
                throw new ArgumentNullException(nameof(tokenUsageStatistics));
            }

            var errors = result.Errors.Select(e => e.ToGenerationIssue());

            IEnumerable <GenerationIssue> warnings = Enumerable.Empty <GenerationIssue>();

            if (!errors.Any())
            {
                var unusedTokenWarnings = tokenUsageStatistics.UnusedTokens.Select(t =>
                                                                                   new GenerationIssue(GenerationServiceErrorCodes.UnusedTokenErrorCode, GenerationServiceErrorCodes.GenerationServiceErrorSource, $"Unused token: {t}"));

                var unrecognisedTokenWarnings = tokenUsageStatistics.UnrecognisedTokens.Select(t =>
                                                                                               new GenerationIssue(GenerationServiceErrorCodes.UnrecognisedToken, GenerationServiceErrorCodes.GenerationServiceErrorSource, $"Unrecognised token: {t}"));

                if (configuration.ErrorOnWarnings)
                {
                    errors = errors.Concat(unusedTokenWarnings).Concat(unrecognisedTokenWarnings);
                }
                else
                {
                    warnings = warnings.Concat(unusedTokenWarnings).Concat(unrecognisedTokenWarnings);
                }

                if (configuration.ErrorOnFileChanged && result.HasChanged)
                {
                    var error = new GenerationIssue(
                        GenerationServiceErrorCodes.FileChangedErrorCode,
                        GenerationServiceErrorCodes.GenerationServiceErrorSource,
                        $"File changed and preference 'ErrorOnFileChanged' was supplied.");
                    errors = errors.Concat(error.ToSingleEnumerable());
                }
            }

            return(new GeneratedFile(
                       result.ConfigurationName,
                       result.FullPath,
                       tokenUsageStatistics.UsedTokens,
                       tokenUsageStatistics.UnusedTokens,
                       tokenUsageStatistics.UnrecognisedTokens,
                       warnings,
                       errors,
                       result.HasChanged));
        }