aspnetcore/src/Microsoft.AspNetCore.Razor..../Extensions/MetadataAttributeTargetExte...

89 lines
3.7 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNetCore.Razor.Language.CodeGeneration;
namespace Microsoft.AspNetCore.Razor.Language.Extensions
{
internal class MetadataAttributeTargetExtension : IMetadataAttributeTargetExtension
{
public string CompiledItemAttributeName { get; set; } = "global::Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItemAttribute";
public string SourceChecksumAttributeName { get; set; } = "global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute";
public string CompiledItemMetadataAttributeName { get; set; } = "global::Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItemMetadataAttribute";
public void WriteRazorCompiledItemAttribute(CodeRenderingContext context, RazorCompiledItemAttributeIntermediateNode node)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (node == null)
{
throw new ArgumentNullException(nameof(node));
}
// [assembly: global::...RazorCompiledItem(typeof({node.TypeName}), @"{node.Kind}", @"{node.Identifier}")]
context.CodeWriter.Write("[assembly: ");
context.CodeWriter.Write(CompiledItemAttributeName);
context.CodeWriter.Write("(typeof(");
context.CodeWriter.Write(node.TypeName);
context.CodeWriter.Write("), @\"");
context.CodeWriter.Write(node.Kind);
context.CodeWriter.Write("\", @\"");
context.CodeWriter.Write(node.Identifier);
context.CodeWriter.WriteLine("\")]");
}
public void WriteRazorCompiledItemMetadataAttribute(CodeRenderingContext context, RazorCompiledItemMetadataAttributeIntermediateNode node)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (node == null)
{
throw new ArgumentNullException(nameof(node));
}
// [assembly: global::...RazorCompiledItemAttribute(@"{node.Key}", @"{node.Value}")]
context.CodeWriter.Write("[");
context.CodeWriter.Write(CompiledItemMetadataAttributeName);
context.CodeWriter.Write("(");
context.CodeWriter.WriteStringLiteral(node.Key);
context.CodeWriter.Write(", ");
context.CodeWriter.WriteStringLiteral(node.Value);
context.CodeWriter.WriteLine(")]");
}
public void WriteRazorSourceChecksumAttribute(CodeRenderingContext context, RazorSourceChecksumAttributeIntermediateNode node)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (node == null)
{
throw new ArgumentNullException(nameof(node));
}
// [global::...RazorSourceChecksum(@"{node.ChecksumAlgorithm}", @"{node.Checksum}", @"{node.Identifier}")]
context.CodeWriter.Write("[");
context.CodeWriter.Write(SourceChecksumAttributeName);
context.CodeWriter.Write("(@\"");
context.CodeWriter.Write(node.ChecksumAlgorithm);
context.CodeWriter.Write("\", @\"");
context.CodeWriter.Write(Checksum.BytesToString(node.Checksum));
context.CodeWriter.Write("\", @\"");
context.CodeWriter.Write(node.Identifier);
context.CodeWriter.WriteLine("\")]");
}
}
}