diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/DesignTimeNodeWriterTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/DesignTimeNodeWriterTest.cs
index f7e23f0b44e..5cab7f66e77 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/DesignTimeNodeWriterTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/DesignTimeNodeWriterTest.cs
@@ -21,7 +21,7 @@ protected override void ConfigureCodeDocumentProcessor(RazorCodeDocumentProcesso
public void WriteUsingDirective_NoSource_WritesContent()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new UsingDirectiveIntermediateNode()
@@ -45,7 +45,7 @@ public void WriteUsingDirective_NoSource_WritesContent()
public void WriteUsingDirective_WithSource_WritesContentWithLinePragmaAndMapping()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var originalSpan = new SourceSpan("test.cshtml", 0, 0, 0, 6);
@@ -81,7 +81,7 @@ public void WriteUsingDirective_WithSource_WritesContentWithLinePragmaAndMapping
public void WriteUsingDirective_WithSourceAndLineDirectives_WritesContentWithLinePragmaAndMapping()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var originalSpan = new SourceSpan("test.cshtml", 0, 0, 0, 6);
@@ -120,7 +120,7 @@ public void WriteUsingDirective_WithSourceAndLineDirectives_WritesContentWithLin
public void WriteCSharpExpression_SkipsLinePragma_WithoutSource()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpExpressionIntermediateNode();
@@ -143,7 +143,7 @@ public void WriteCSharpExpression_SkipsLinePragma_WithoutSource()
public void WriteCSharpExpression_WritesLinePragma_WithSource()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpExpressionIntermediateNode()
@@ -178,7 +178,7 @@ public void WriteCSharpExpression_WritesLinePragma_WithSource()
public void WriteCSharpExpression_WithExtensionNode_WritesPadding()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpExpressionIntermediateNode();
@@ -207,7 +207,7 @@ public void WriteCSharpExpression_WithExtensionNode_WritesPadding()
public void WriteCSharpExpression_WithSource_WritesPadding()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpExpressionIntermediateNode()
@@ -246,7 +246,7 @@ public void WriteCSharpExpression_WithSource_WritesPadding()
public void WriteCSharpCode_WhitespaceContentWithSource_WritesContent()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpCodeIntermediateNode()
@@ -280,7 +280,7 @@ public void WriteCSharpCode_WhitespaceContentWithSource_WritesContent()
public void WriteCSharpCode_SkipsLinePragma_WithoutSource()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpCodeIntermediateNode();
@@ -303,7 +303,7 @@ public void WriteCSharpCode_SkipsLinePragma_WithoutSource()
public void WriteCSharpCode_WritesLinePragma_WithSource()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpCodeIntermediateNode()
@@ -337,7 +337,7 @@ public void WriteCSharpCode_WritesLinePragma_WithSource()
public void WriteCSharpCode_WritesPadding_WithSource()
{
// Arrange
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
var node = new CSharpCodeIntermediateNode()
@@ -370,14 +370,14 @@ public void WriteCSharpCode_WritesPadding_WithSource()
[Fact]
public void WriteCSharpExpressionAttributeValue_RendersCorrectly()
{
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
var codeDocument = ProjectEngine.CreateCodeDocument(source);
var processor = CreateCodeDocumentProcessor(codeDocument);
var documentNode = processor.GetDocumentNode();
- var node = documentNode.Children.OfType().Single().Children[1] as CSharpExpressionAttributeValueIntermediateNode;
+ var node = (CSharpExpressionAttributeValueIntermediateNode)documentNode.Children.OfType().Single().Children[1];
using var context = TestCodeRenderingContext.CreateDesignTime(source: source);
@@ -403,13 +403,13 @@ public void WriteCSharpExpressionAttributeValue_RendersCorrectly()
[Fact]
public void WriteCSharpCodeAttributeValue_RendersCorrectly()
{
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
var content = "";
var sourceDocument = TestRazorSourceDocument.Create(content);
var codeDocument = ProjectEngine.CreateCodeDocument(sourceDocument);
var processor = CreateCodeDocumentProcessor(codeDocument);
var documentNode = processor.GetDocumentNode();
- var node = documentNode.Children.OfType().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
+ var node = (CSharpCodeAttributeValueIntermediateNode)documentNode.Children.OfType().Single().Children[1];
using var context = TestCodeRenderingContext.CreateDesignTime(source: sourceDocument);
@@ -435,13 +435,13 @@ public void WriteCSharpCodeAttributeValue_RendersCorrectly()
[Fact]
public void WriteCSharpCodeAttributeValue_WithExpression_RendersCorrectly()
{
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
var codeDocument = ProjectEngine.CreateCodeDocument(source);
var processor = CreateCodeDocumentProcessor(codeDocument);
var documentNode = processor.GetDocumentNode();
- var node = documentNode.Children.OfType().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
+ var node = (CSharpCodeAttributeValueIntermediateNode)documentNode.Children.OfType().Single().Children[1];
using var context = TestCodeRenderingContext.CreateDesignTime(source: source);
@@ -484,7 +484,7 @@ Render Children
[InlineData(@"\\SERVER/pages\test.cshtml", @"\\SERVER\pages\test.cshtml")]
public void LinePragma_Is_Adjusted_On_Windows(string fileName, string expectedFileName)
{
- var writer = new DesignTimeNodeWriter();
+ var writer = DesignTimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime();
Assert.True(context.Options.RemapLinePragmaPathsOnWindows);
@@ -528,7 +528,7 @@ public void LinePragma_Is_Adjusted_On_Windows(string fileName, string expectedFi
[InlineData(@"\\SERVER/pages\test.cshtml", @"\\SERVER\pages\test.cshtml")]
public void LinePragma_Enhanced_Is_Adjusted_On_Windows(string fileName, string expectedFileName)
{
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateDesignTime(source: RazorSourceDocument.Create("", fileName));
Assert.True(context.Options.RemapLinePragmaPathsOnWindows);
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/LiteralRuntimeNodeWriterTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/LiteralRuntimeNodeWriterTest.cs
index cbe91b970e1..db5f8d504af 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/LiteralRuntimeNodeWriterTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/LiteralRuntimeNodeWriterTest.cs
@@ -12,7 +12,7 @@ public class LiteralRuntimeNodeWriterTest
public void WriteCSharpExpression_UsesWriteLiteral_WritesLinePragma_WithSource()
{
// Arrange
- var writer = new LiteralRuntimeNodeWriter();
+ var writer = LiteralRuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new CSharpExpressionIntermediateNode();
@@ -43,7 +43,7 @@ public void WriteCSharpExpression_UsesWriteLiteral_WritesLinePragma_WithSource()
public void WriteCSharpExpression_WithMultipleChildren()
{
// Arrange
- var writer = new LiteralRuntimeNodeWriter();
+ var writer = LiteralRuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new CSharpExpressionIntermediateNode();
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/RuntimeNodeWriterTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/RuntimeNodeWriterTest.cs
index c09ef8d3c8c..2384f4452b6 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/RuntimeNodeWriterTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/RuntimeNodeWriterTest.cs
@@ -22,7 +22,7 @@ protected override void ConfigureCodeDocumentProcessor(RazorCodeDocumentProcesso
public void WriteUsingDirective_NoSource_WritesContent()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new UsingDirectiveIntermediateNode()
@@ -46,7 +46,7 @@ public void WriteUsingDirective_NoSource_WritesContent()
public void WriteUsingDirective_WithSource_WritesContentWithLinePragma()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new UsingDirectiveIntermediateNode()
@@ -77,7 +77,7 @@ public void WriteUsingDirective_WithSource_WritesContentWithLinePragma()
public void WriteUsingDirective_WithSourceAndLineDirectives_WritesContentWithLinePragmaAndMapping()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new UsingDirectiveIntermediateNode()
@@ -111,10 +111,7 @@ public void WriteUsingDirective_WithSourceAndLineDirectives_WritesContentWithLin
public void WriteCSharpExpression_SkipsLinePragma_WithoutSource()
{
// Arrange
- var writer = new RuntimeNodeWriter()
- {
- WriteCSharpExpressionMethod = "Test"
- };
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
@@ -128,7 +125,7 @@ public void WriteCSharpExpression_SkipsLinePragma_WithoutSource()
// Assert
var csharp = context.CodeWriter.GetText().ToString();
Assert.Equal(
-@"Test(
+@"Write(
i++);
",
csharp,
@@ -139,10 +136,7 @@ public void WriteCSharpExpression_SkipsLinePragma_WithoutSource()
public void WriteCSharpExpression_WritesLinePragma_WithSource()
{
// Arrange
- var writer = new RuntimeNodeWriter()
- {
- WriteCSharpExpressionMethod = "Test"
- };
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
@@ -156,7 +150,7 @@ public void WriteCSharpExpression_WritesLinePragma_WithSource()
// Assert
var csharp = context.CodeWriter.GetText().ToString();
Assert.Equal(
-@"Test(
+@"Write(
#nullable restore
#line (1,1)-(1,4) ""test.cshtml""
i++
@@ -174,10 +168,7 @@ public void WriteCSharpExpression_WritesLinePragma_WithSource()
public void WriteCSharpExpression_WithExtensionNode_WritesPadding()
{
// Arrange
- var writer = new RuntimeNodeWriter()
- {
- WriteCSharpExpressionMethod = "Test"
- };
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
@@ -195,7 +186,7 @@ public void WriteCSharpExpression_WithExtensionNode_WritesPadding()
// Assert
var csharp = context.CodeWriter.GetText().ToString();
Assert.Equal(
-@"Test(
+@"Write(
iRender Children
++);
",
@@ -207,10 +198,7 @@ iRender Children
public void WriteCSharpExpression_WithSource_WritesPadding()
{
// Arrange
- var writer = new RuntimeNodeWriter()
- {
- WriteCSharpExpressionMethod = "Test"
- };
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
@@ -228,7 +216,7 @@ public void WriteCSharpExpression_WithSource_WritesPadding()
// Assert
var csharp = context.CodeWriter.GetText().ToString();
Assert.Equal(
-@"Test(
+@"Write(
#nullable restore
#line (1,1)-(1,2) ""test.cshtml""
i
@@ -254,7 +242,7 @@ Render Children
public void WriteCSharpCode_WhitespaceContent_DoesNothing()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new CSharpCodeIntermediateNode();
@@ -273,7 +261,7 @@ public void WriteCSharpCode_WhitespaceContent_DoesNothing()
public void WriteCSharpCode_SkipsLinePragma_WithoutSource()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new CSharpCodeIntermediateNode();
@@ -296,7 +284,7 @@ public void WriteCSharpCode_SkipsLinePragma_WithoutSource()
public void WriteCSharpCode_WritesLinePragma_WithSource()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new CSharpCodeIntermediateNode();
@@ -327,7 +315,7 @@ public void WriteCSharpCode_WritesLinePragma_WithSource()
public void WriteCSharpCode_WritesPadding_WithSource()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new CSharpCodeIntermediateNode();
@@ -358,7 +346,7 @@ public void WriteCSharpCode_WritesPadding_WithSource()
public void WriteHtmlLiteral_WithinMaxSize_WritesSingleLiteral()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
// Act
@@ -377,7 +365,7 @@ public void WriteHtmlLiteral_WithinMaxSize_WritesSingleLiteral()
public void WriteHtmlLiteral_GreaterThanMaxSize_WritesMultipleLiterals()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
// Act
@@ -397,7 +385,7 @@ public void WriteHtmlLiteral_GreaterThanMaxSize_WritesMultipleLiterals()
public void WriteHtmlLiteral_GreaterThanMaxSize_SingleEmojisSplit()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
// Act
@@ -417,7 +405,7 @@ public void WriteHtmlLiteral_GreaterThanMaxSize_SingleEmojisSplit()
public void WriteHtmlLiteral_GreaterThanMaxSize_SequencedZeroWithJoinedEmojisSplit()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
// Act
@@ -439,7 +427,7 @@ public void WriteHtmlLiteral_GreaterThanMaxSize_SequencedZeroWithJoinedEmojisSpl
public void WriteHtmlContent_RendersContentCorrectly()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new HtmlContentIntermediateNode();
@@ -461,7 +449,7 @@ public void WriteHtmlContent_RendersContentCorrectly()
public void WriteHtmlContent_LargeStringLiteral_UsesMultipleWrites()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
var node = new HtmlContentIntermediateNode();
@@ -485,7 +473,7 @@ public void WriteHtmlContent_LargeStringLiteral_UsesMultipleWrites()
public void WriteHtmlAttribute_RendersCorrectly()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
var codeDocument = ProjectEngine.CreateCodeDocument(source);
@@ -514,7 +502,7 @@ Render Children
public void WriteHtmlAttributeValue_RendersCorrectly()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
var codeDocument = ProjectEngine.CreateCodeDocument(source);
@@ -540,7 +528,7 @@ public void WriteHtmlAttributeValue_RendersCorrectly()
public void WriteCSharpExpressionAttributeValue_RendersCorrectly()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
var codeDocument = ProjectEngine.CreateCodeDocument(source);
@@ -574,7 +562,7 @@ public void WriteCSharpExpressionAttributeValue_RendersCorrectly()
public void WriteCSharpCodeAttributeValue_BuffersResult()
{
// Arrange
- var writer = new RuntimeNodeWriter();
+ var writer = RuntimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
@@ -612,10 +600,7 @@ public void WriteCSharpCodeAttributeValue_BuffersResult()
public void BeginWriterScope_UsesSpecifiedWriter_RendersCorrectly()
{
// Arrange
- var writer = new RuntimeNodeWriter()
- {
- PushWriterMethod = "TestPushWriter"
- };
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
@@ -625,7 +610,7 @@ public void BeginWriterScope_UsesSpecifiedWriter_RendersCorrectly()
// Assert
var csharp = context.CodeWriter.GetText().ToString();
Assert.Equal(
-@"TestPushWriter(MyWriter);
+@"PushWriter(MyWriter);
",
csharp,
ignoreLineEndingDifferences: true);
@@ -635,10 +620,7 @@ public void BeginWriterScope_UsesSpecifiedWriter_RendersCorrectly()
public void EndWriterScope_RendersCorrectly()
{
// Arrange
- var writer = new RuntimeNodeWriter()
- {
- PopWriterMethod = "TestPopWriter"
- };
+ var writer = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime();
@@ -648,7 +630,7 @@ public void EndWriterScope_RendersCorrectly()
// Assert
var csharp = context.CodeWriter.GetText().ToString();
Assert.Equal(
-@"TestPopWriter();
+@"PopWriter();
",
csharp,
ignoreLineEndingDifferences: true);
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriterTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriterTest.cs
index 2bc29757852..6c9cedd6501 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriterTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriterTest.cs
@@ -19,7 +19,7 @@ protected override void ConfigureCodeDocumentProcessor(RazorCodeDocumentProcesso
[Fact]
public void WriteHtmlAttributeValue_RendersCorrectly()
{
- var writer = new TagHelperHtmlAttributeRuntimeNodeWriter();
+ var writer = TagHelperHtmlAttributeRuntimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
@@ -45,7 +45,7 @@ public void WriteHtmlAttributeValue_RendersCorrectly()
[Fact]
public void WriteCSharpExpressionAttributeValue_RendersCorrectly()
{
- var writer = new TagHelperHtmlAttributeRuntimeNodeWriter();
+ var writer = TagHelperHtmlAttributeRuntimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
var codeDocument = ProjectEngine.CreateCodeDocument(source);
@@ -78,7 +78,7 @@ public void WriteCSharpExpressionAttributeValue_RendersCorrectly()
[Fact]
public void WriteCSharpCodeAttributeValue_BuffersResult()
{
- var writer = new TagHelperHtmlAttributeRuntimeNodeWriter();
+ var writer = TagHelperHtmlAttributeRuntimeNodeWriter.Instance;
var content = "";
var source = TestRazorSourceDocument.Create(content);
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Extensions/TemplateTargetExtensionTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Extensions/TemplateTargetExtensionTest.cs
index e7783f3fddd..6c022489a40 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Extensions/TemplateTargetExtensionTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Extensions/TemplateTargetExtensionTest.cs
@@ -27,11 +27,7 @@ public void WriteTemplate_WritesTemplateCode()
TemplateTypeName = "global::TestTemplate"
};
- var nodeWriter = new RuntimeNodeWriter()
- {
- PushWriterMethod = "TestPushWriter",
- PopWriterMethod = "TestPopWriter"
- };
+ var nodeWriter = RuntimeNodeWriter.Instance;
using var context = TestCodeRenderingContext.CreateRuntime(nodeWriter: nodeWriter);
@@ -40,9 +36,9 @@ public void WriteTemplate_WritesTemplateCode()
// Assert
var expected = @"item => new global::TestTemplate(async(__razor_template_writer) => {
- TestPushWriter(__razor_template_writer);
+ PushWriter(__razor_template_writer);
Render Children
- TestPopWriter();
+ PopWriter();
}
)";
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DefaultCodeTarget.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DefaultCodeTarget.cs
index c2f7f24cdb7..44e5ed55eb6 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DefaultCodeTarget.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DefaultCodeTarget.cs
@@ -12,6 +12,6 @@ internal sealed class DefaultCodeTarget(
{
public override IntermediateNodeWriter CreateNodeWriter()
=> Options.DesignTime
- ? new DesignTimeNodeWriter()
- : new RuntimeNodeWriter();
+ ? DesignTimeNodeWriter.Instance
+ : RuntimeNodeWriter.Instance;
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DesignTimeNodeWriter.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DesignTimeNodeWriter.cs
index 6db086e2d11..3e9868eea69 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DesignTimeNodeWriter.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/DesignTimeNodeWriter.cs
@@ -1,8 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
using System;
using System.Diagnostics;
using Microsoft.AspNetCore.Razor.Language.Extensions;
@@ -12,6 +10,12 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration;
public class DesignTimeNodeWriter : IntermediateNodeWriter
{
+ public static readonly DesignTimeNodeWriter Instance = new DesignTimeNodeWriter();
+
+ private DesignTimeNodeWriter()
+ {
+ }
+
public override void WriteUsingDirective(CodeRenderingContext context, UsingDirectiveIntermediateNode node)
{
if (node.Source is { FilePath: not null } sourceSpan)
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/IntermediateNodeWriter.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/IntermediateNodeWriter.cs
index 7dcc0bc60e3..a8d5dfdbc87 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/IntermediateNodeWriter.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/IntermediateNodeWriter.cs
@@ -1,8 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
using System;
using Microsoft.AspNetCore.Razor.Language.Intermediate;
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/LiteralRuntimeNodeWriter.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/LiteralRuntimeNodeWriter.cs
index 3be1fef2372..6631ad30f20 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/LiteralRuntimeNodeWriter.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/LiteralRuntimeNodeWriter.cs
@@ -1,11 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration;
internal class LiteralRuntimeNodeWriter : RuntimeNodeWriter
{
- public override string WriteCSharpExpressionMethod { get; set; } = "WriteLiteral";
+ public static new readonly LiteralRuntimeNodeWriter Instance = new LiteralRuntimeNodeWriter();
+
+ private LiteralRuntimeNodeWriter()
+ {
+ }
+
+ public override string WriteCSharpExpressionMethod => "WriteLiteral";
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/RuntimeNodeWriter.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/RuntimeNodeWriter.cs
index 80fb96663c9..c01b6bab741 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/RuntimeNodeWriter.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/RuntimeNodeWriter.cs
@@ -4,7 +4,6 @@
#nullable disable
using System;
-using System.Globalization;
using System.Linq;
using Microsoft.AspNetCore.Razor.Language.Intermediate;
using Microsoft.AspNetCore.Razor.PooledObjects;
@@ -13,21 +12,27 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration;
public class RuntimeNodeWriter : IntermediateNodeWriter
{
- public virtual string WriteCSharpExpressionMethod { get; set; } = "Write";
+ public static readonly RuntimeNodeWriter Instance = new RuntimeNodeWriter();
- public virtual string WriteHtmlContentMethod { get; set; } = "WriteLiteral";
+ public virtual string WriteCSharpExpressionMethod => "Write";
- public virtual string BeginWriteAttributeMethod { get; set; } = "BeginWriteAttribute";
+ public virtual string WriteHtmlContentMethod => "WriteLiteral";
- public virtual string EndWriteAttributeMethod { get; set; } = "EndWriteAttribute";
+ public virtual string BeginWriteAttributeMethod => "BeginWriteAttribute";
- public virtual string WriteAttributeValueMethod { get; set; } = "WriteAttributeValue";
+ public virtual string EndWriteAttributeMethod => "EndWriteAttribute";
- public virtual string PushWriterMethod { get; set; } = "PushWriter";
+ public virtual string WriteAttributeValueMethod => "WriteAttributeValue";
- public virtual string PopWriterMethod { get; set; } = "PopWriter";
+ public virtual string PushWriterMethod => "PushWriter";
- public string TemplateTypeName { get; set; } = "Microsoft.AspNetCore.Mvc.Razor.HelperResult";
+ public virtual string PopWriterMethod => "PopWriter";
+
+ public const string TemplateTypeName = "Microsoft.AspNetCore.Mvc.Razor.HelperResult";
+
+ protected RuntimeNodeWriter()
+ {
+ }
public override void WriteUsingDirective(CodeRenderingContext context, UsingDirectiveIntermediateNode node)
{
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriter.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriter.cs
index 3ce267685f3..df89c0a39d5 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriter.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/CodeGeneration/TagHelperHtmlAttributeRuntimeNodeWriter.cs
@@ -1,11 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration;
internal class TagHelperHtmlAttributeRuntimeNodeWriter : RuntimeNodeWriter
{
- public override string WriteAttributeValueMethod { get; set; } = "AddHtmlAttributeValue";
+ public static new readonly TagHelperHtmlAttributeRuntimeNodeWriter Instance = new TagHelperHtmlAttributeRuntimeNodeWriter();
+
+ public override string WriteAttributeValueMethod => "AddHtmlAttributeValue";
+
+ private TagHelperHtmlAttributeRuntimeNodeWriter()
+ {
+ }
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Extensions/DefaultTagHelperTargetExtension.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Extensions/DefaultTagHelperTargetExtension.cs
index e1f0c661fab..d0bc07de67f 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Extensions/DefaultTagHelperTargetExtension.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Extensions/DefaultTagHelperTargetExtension.cs
@@ -113,7 +113,7 @@ public void WriteTagHelperBody(CodeRenderingContext context, DefaultTagHelperBod
using (context.CodeWriter.BuildAsyncLambda())
{
// We remove and redirect writers so TagHelper authors can retrieve content.
- context.RenderChildren(node, new RuntimeNodeWriter());
+ context.RenderChildren(node, RuntimeNodeWriter.Instance);
}
context.CodeWriter.WriteEndMethodInvocation();
@@ -236,7 +236,7 @@ child is CSharpCodeAttributeValueIntermediateNode ||
.Write(attributeValueStyleParameter)
.WriteEndMethodInvocation();
- context.RenderChildren(node, new TagHelperHtmlAttributeRuntimeNodeWriter());
+ context.RenderChildren(node, TagHelperHtmlAttributeRuntimeNodeWriter.Instance);
context.CodeWriter
.WriteMethodInvocation(
@@ -255,7 +255,7 @@ child is CSharpCodeAttributeValueIntermediateNode ||
// We're building a writing scope around the provided chunks which captures everything written from the
// page. Therefore, we do not want to write to any other buffer since we're using the pages buffer to
// ensure we capture all content that's written, directly or indirectly.
- context.RenderChildren(node, new RuntimeNodeWriter());
+ context.RenderChildren(node, RuntimeNodeWriter.Instance);
context.CodeWriter
.WriteStartAssignment(StringValueBufferVariableName)
@@ -358,7 +358,7 @@ public void WriteTagHelperProperty(CodeRenderingContext context, DefaultTagHelpe
{
context.CodeWriter.WriteMethodInvocation(BeginWriteTagHelperAttributeMethodName);
- context.RenderChildren(node, new LiteralRuntimeNodeWriter());
+ context.RenderChildren(node, LiteralRuntimeNodeWriter.Instance);
context.CodeWriter
.WriteStartAssignment(StringValueBufferVariableName)
diff --git a/src/Shared/Microsoft.AspNetCore.Razor.Test.Common/Language/CodeGeneration/TestCodeRenderingContext.cs b/src/Shared/Microsoft.AspNetCore.Razor.Test.Common/Language/CodeGeneration/TestCodeRenderingContext.cs
index 87293cb7e11..870132e673c 100644
--- a/src/Shared/Microsoft.AspNetCore.Razor.Test.Common/Language/CodeGeneration/TestCodeRenderingContext.cs
+++ b/src/Shared/Microsoft.AspNetCore.Razor.Test.Common/Language/CodeGeneration/TestCodeRenderingContext.cs
@@ -15,7 +15,7 @@ public static CodeRenderingContext CreateDesignTime(
RazorSourceDocument source = null,
IntermediateNodeWriter nodeWriter = null)
{
- nodeWriter ??= new RuntimeNodeWriter();
+ nodeWriter ??= RuntimeNodeWriter.Instance;
source ??= TestRazorSourceDocument.Create();
var documentNode = new DocumentIntermediateNode();
@@ -33,7 +33,7 @@ public static CodeRenderingContext CreateRuntime(
RazorSourceDocument source = null,
IntermediateNodeWriter nodeWriter = null)
{
- nodeWriter ??= new RuntimeNodeWriter();
+ nodeWriter ??= RuntimeNodeWriter.Instance;
source ??= TestRazorSourceDocument.Create();
var documentNode = new DocumentIntermediateNode();