| File: Mvc\MvcViewDocumentClassifierPass.cs | Web Access |
| Project: src\roslyn\src\Razor\src\Compiler\Microsoft.CodeAnalysis.Razor.Compiler\src\Microsoft.CodeAnalysis.Razor.Compiler.csproj (Microsoft.CodeAnalysis.Razor.Compiler) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Intermediate; namespace Microsoft.AspNetCore.Mvc.Razor.Extensions; public sealed class MvcViewDocumentClassifierPass : DocumentClassifierPassBase { private readonly bool _useConsolidatedMvcViews; public static readonly string MvcViewDocumentKind = "mvc.1.0.view"; protected override string DocumentKind => MvcViewDocumentKind; protected override bool IsMatch(RazorCodeDocument codeDocument, DocumentIntermediateNode documentNode) => true; public MvcViewDocumentClassifierPass() : this(false) { } public MvcViewDocumentClassifierPass(bool useConsolidatedMvcViews) { _useConsolidatedMvcViews = useConsolidatedMvcViews; } protected override void OnDocumentStructureCreated( RazorCodeDocument codeDocument, NamespaceDeclarationIntermediateNode @namespace, ClassDeclarationIntermediateNode @class, MethodDeclarationIntermediateNode method) { base.OnDocumentStructureCreated(codeDocument, @namespace, @class, method); if (!codeDocument.TryGetNamespace(fallbackToRootNamespace: false, out var namespaceName)) { @namespace.Name = _useConsolidatedMvcViews ? "AspNetCoreGeneratedDocument" : "AspNetCore"; } else { @namespace.Name = namespaceName; } if (!codeDocument.TryComputeClassName(out var className)) { // It's possible for a Razor document to not have a file path. // Eg. When we try to generate code for an in memory document like default imports. var checksum = ChecksumUtilities.BytesToString(codeDocument.Source.Text.GetChecksum()); @class.Name = "AspNetCore_" + checksum; } else { @class.Name = className; } @class.BaseType = new BaseTypeWithModel("global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel>", location: null); @class.Modifiers = _useConsolidatedMvcViews ? CommonModifiers.InternalSealed : CommonModifiers.Public; @class.NullableContext = true; method.Name = "ExecuteAsync"; method.Modifiers = CommonModifiers.PublicAsyncOverride; method.ReturnType = $"global::{typeof(System.Threading.Tasks.Task).FullName}"; } }