diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorProjectEngine.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorProjectEngine.cs index 6ac8e4c4cd..b432fd2f9a 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorProjectEngine.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorProjectEngine.cs @@ -54,48 +54,7 @@ namespace Microsoft.AspNetCore.Razor.Language public override IReadOnlyList ProjectFeatures { get; } - protected override void ConfigureParserOptions(RazorParserOptionsBuilder builder) - { - if (builder == null) - { - throw new ArgumentNullException(nameof(builder)); - } - } - - protected override void ConfigureDesignTimeParserOptions(RazorParserOptionsBuilder builder) - { - if (builder == null) - { - throw new ArgumentNullException(nameof(builder)); - } - - builder.SetDesignTime(true); - } - - protected override void ConfigureCodeGenerationOptions(RazorCodeGenerationOptionsBuilder builder) - { - if (builder == null) - { - throw new ArgumentNullException(nameof(builder)); - } - } - - protected override void ConfigureDesignTimeCodeGenerationOptions(RazorCodeGenerationOptionsBuilder builder) - { - if (builder == null) - { - throw new ArgumentNullException(nameof(builder)); - } - - builder.SetDesignTime(true); - builder.SuppressChecksum = true; - builder.SuppressMetadataAttributes = true; - } - - protected override RazorCodeDocument ProcessCore( - RazorProjectItem projectItem, - Action configureParser, - Action configureCodeGeneration) + protected override RazorCodeDocument CreateCodeDocumentCore(RazorProjectItem projectItem) { if (projectItem == null) { @@ -107,14 +66,38 @@ namespace Microsoft.AspNetCore.Razor.Language var importFeature = GetRequiredFeature(); var imports = importFeature.GetImports(projectItem); - var parserOptions = GetRequiredFeature().Create(configureParser); - var codeGenerationOptions = GetRequiredFeature().Create(configureCodeGeneration); + var parserOptions = GetRequiredFeature().Create(ConfigureParserOptions); + var codeGenerationOptions = GetRequiredFeature().Create(ConfigureCodeGenerationOptions); - var codeDocument = RazorCodeDocument.Create(sourceDocument, imports, parserOptions, codeGenerationOptions); + return RazorCodeDocument.Create(sourceDocument, imports, parserOptions, codeGenerationOptions); + } + + protected override RazorCodeDocument CreateCodeDocumentDesignTimeCore(RazorProjectItem projectItem) + { + if (projectItem == null) + { + throw new ArgumentNullException(nameof(projectItem)); + } + + var sourceDocument = RazorSourceDocument.ReadFrom(projectItem); + + var importFeature = GetRequiredFeature(); + var imports = importFeature.GetImports(projectItem); + + var parserOptions = GetRequiredFeature().Create(ConfigureDesignTimeParserOptions); + var codeGenerationOptions = GetRequiredFeature().Create(ConfigureDesignTimeCodeGenerationOptions); + + return RazorCodeDocument.Create(sourceDocument, imports, parserOptions, codeGenerationOptions); + } + + protected override void ProcessCore(RazorCodeDocument codeDocument) + { + if (codeDocument == null) + { + throw new ArgumentNullException(nameof(codeDocument)); + } Engine.Process(codeDocument); - - return codeDocument; } private TFeature GetRequiredFeature() where TFeature : IRazorProjectEngineFeature @@ -130,5 +113,25 @@ namespace Microsoft.AspNetCore.Razor.Language return feature; } + + private void ConfigureParserOptions(RazorParserOptionsBuilder builder) + { + } + + private void ConfigureDesignTimeParserOptions(RazorParserOptionsBuilder builder) + { + builder.SetDesignTime(true); + } + + private void ConfigureCodeGenerationOptions(RazorCodeGenerationOptionsBuilder builder) + { + } + + private void ConfigureDesignTimeCodeGenerationOptions(RazorCodeGenerationOptionsBuilder builder) + { + builder.SetDesignTime(true); + builder.SuppressChecksum = true; + builder.SuppressMetadataAttributes = true; + } } } diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorProjectEngine.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorProjectEngine.cs index 04f86c38d3..09ae61dc1f 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/RazorProjectEngine.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorProjectEngine.cs @@ -22,14 +22,6 @@ namespace Microsoft.AspNetCore.Razor.Language public abstract IReadOnlyList ProjectFeatures { get; } - protected abstract void ConfigureParserOptions(RazorParserOptionsBuilder builder); - - protected abstract void ConfigureDesignTimeParserOptions(RazorParserOptionsBuilder builder); - - protected abstract void ConfigureCodeGenerationOptions(RazorCodeGenerationOptionsBuilder builder); - - protected abstract void ConfigureDesignTimeCodeGenerationOptions(RazorCodeGenerationOptionsBuilder builder); - public virtual RazorCodeDocument Process(RazorProjectItem projectItem) { if (projectItem == null) @@ -37,7 +29,9 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(projectItem)); } - return ProcessCore(projectItem, ConfigureParserOptions, ConfigureCodeGenerationOptions); + var codeDocument = CreateCodeDocumentCore(projectItem); + ProcessCore(codeDocument); + return codeDocument; } public virtual RazorCodeDocument ProcessDesignTime(RazorProjectItem projectItem) @@ -47,13 +41,16 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(projectItem)); } - return ProcessCore(projectItem, ConfigureDesignTimeParserOptions, ConfigureDesignTimeCodeGenerationOptions); + var codeDocument = CreateCodeDocumentDesignTimeCore(projectItem); + ProcessCore(codeDocument); + return codeDocument; } - protected abstract RazorCodeDocument ProcessCore( - RazorProjectItem projectItem, - Action configureParser, - Action configureCodeGeneration); + protected abstract RazorCodeDocument CreateCodeDocumentCore(RazorProjectItem projectItem); + + protected abstract RazorCodeDocument CreateCodeDocumentDesignTimeCore(RazorProjectItem projectItem); + + protected abstract void ProcessCore(RazorCodeDocument codeDocument); public static RazorProjectEngine Create(RazorConfiguration configuration, RazorProjectFileSystem fileSystem) => Create(configuration, fileSystem, configure: null);