Moved CreateTagHelperIRNode from renderer to writer
This commit is contained in:
parent
1a05359d12
commit
6fea6454f0
|
|
@ -206,6 +206,11 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
Context.TagHelperWriter.WriteInitializeTagHelperStructure(Context, node);
|
Context.TagHelperWriter.WriteInitializeTagHelperStructure(Context, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VisitCreateTagHelper(CreateTagHelperIRNode node)
|
||||||
|
{
|
||||||
|
Context.TagHelperWriter.WriteCreateTagHelper(Context, node);
|
||||||
|
}
|
||||||
|
|
||||||
public override void VisitDefault(RazorIRNode node)
|
public override void VisitDefault(RazorIRNode node)
|
||||||
{
|
{
|
||||||
// This is a temporary bridge to the renderer, which allows us to move functionality piecemeal
|
// This is a temporary bridge to the renderer, which allows us to move functionality piecemeal
|
||||||
|
|
|
||||||
|
|
@ -204,18 +204,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
Context.Writer.WriteLine("))();");
|
Context.Writer.WriteLine("))();");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void VisitCreateTagHelper(CreateTagHelperIRNode node)
|
|
||||||
{
|
|
||||||
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
|
|
||||||
|
|
||||||
Context.Writer
|
|
||||||
.WriteStartAssignment(tagHelperVariableName)
|
|
||||||
.WriteStartMethodInvocation(
|
|
||||||
"CreateTagHelper" /* ORIGINAL: CreateTagHelperMethodName */,
|
|
||||||
"global::" + node.TagHelperTypeName)
|
|
||||||
.WriteEndMethodInvocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VisitSetTagHelperProperty(SetTagHelperPropertyIRNode node)
|
public override void VisitSetTagHelperProperty(SetTagHelperPropertyIRNode node)
|
||||||
{
|
{
|
||||||
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
|
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
{
|
{
|
||||||
public class DesignTimeTagHelperWriter : TagHelperWriter
|
public class DesignTimeTagHelperWriter : TagHelperWriter
|
||||||
{
|
{
|
||||||
|
public string CreateTagHelperMethodName { get; set; } = "CreateTagHelper";
|
||||||
|
|
||||||
public override void WriteDeclareTagHelperFields(CSharpRenderingContext context, DeclareTagHelperFieldsIRNode node)
|
public override void WriteDeclareTagHelperFields(CSharpRenderingContext context, DeclareTagHelperFieldsIRNode node)
|
||||||
{
|
{
|
||||||
foreach (var tagHelperTypeName in node.UsedTagHelperTypeNames)
|
foreach (var tagHelperTypeName in node.UsedTagHelperTypeNames)
|
||||||
|
|
@ -29,7 +31,14 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
|
|
||||||
public override void WriteCreateTagHelper(CSharpRenderingContext context, CreateTagHelperIRNode node)
|
public override void WriteCreateTagHelper(CSharpRenderingContext context, CreateTagHelperIRNode node)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
|
||||||
|
|
||||||
|
context.Writer
|
||||||
|
.WriteStartAssignment(tagHelperVariableName)
|
||||||
|
.WriteStartMethodInvocation(
|
||||||
|
CreateTagHelperMethodName,
|
||||||
|
"global::" + node.TagHelperTypeName)
|
||||||
|
.WriteEndMethodInvocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void WriteExecuteTagHelpers(CSharpRenderingContext context, ExecuteTagHelpersIRNode node)
|
public override void WriteExecuteTagHelpers(CSharpRenderingContext context, ExecuteTagHelpersIRNode node)
|
||||||
|
|
|
||||||
|
|
@ -255,23 +255,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
linePragmaScope?.Dispose();
|
linePragmaScope?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void VisitCreateTagHelper(CreateTagHelperIRNode node)
|
|
||||||
{
|
|
||||||
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
|
|
||||||
|
|
||||||
Context.Writer
|
|
||||||
.WriteStartAssignment(tagHelperVariableName)
|
|
||||||
.WriteStartMethodInvocation(
|
|
||||||
"CreateTagHelper" /* ORIGINAL: CreateTagHelperMethodName */,
|
|
||||||
"global::" + node.TagHelperTypeName)
|
|
||||||
.WriteEndMethodInvocation();
|
|
||||||
|
|
||||||
Context.Writer.WriteInstanceMethodInvocation(
|
|
||||||
"__tagHelperExecutionContext" /* ORIGINAL: ExecutionContextVariableName */,
|
|
||||||
"Add" /* ORIGINAL: ExecutionContextAddMethodName */,
|
|
||||||
tagHelperVariableName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VisitAddPreallocatedTagHelperHtmlAttribute(AddPreallocatedTagHelperHtmlAttributeIRNode node)
|
public override void VisitAddPreallocatedTagHelperHtmlAttribute(AddPreallocatedTagHelperHtmlAttributeIRNode node)
|
||||||
{
|
{
|
||||||
Context.Writer
|
Context.Writer
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
|
|
||||||
public string ExecutionContextVariableName { get; set; } = "__tagHelperExecutionContext";
|
public string ExecutionContextVariableName { get; set; } = "__tagHelperExecutionContext";
|
||||||
|
|
||||||
|
public string ExecutionContextAddMethodName { get; set; } = "Add";
|
||||||
|
|
||||||
public string RunnerTypeName { get; set; } = "global::Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner";
|
public string RunnerTypeName { get; set; } = "global::Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner";
|
||||||
|
|
||||||
public string RunnerVariableName { get; set; } = "__tagHelperRunner";
|
public string RunnerVariableName { get; set; } = "__tagHelperRunner";
|
||||||
|
|
@ -30,6 +32,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
|
|
||||||
public string TagModeTypeName { get; set; } = "global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode";
|
public string TagModeTypeName { get; set; } = "global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode";
|
||||||
|
|
||||||
|
public string CreateTagHelperMethodName { get; set; } = "CreateTagHelper";
|
||||||
|
|
||||||
public override void WriteDeclareTagHelperFields(CSharpRenderingContext context, DeclareTagHelperFieldsIRNode node)
|
public override void WriteDeclareTagHelperFields(CSharpRenderingContext context, DeclareTagHelperFieldsIRNode node)
|
||||||
{
|
{
|
||||||
context.Writer.WriteLineHiddenDirective();
|
context.Writer.WriteLineHiddenDirective();
|
||||||
|
|
@ -116,7 +120,19 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
|
|
||||||
public override void WriteCreateTagHelper(CSharpRenderingContext context, CreateTagHelperIRNode node)
|
public override void WriteCreateTagHelper(CSharpRenderingContext context, CreateTagHelperIRNode node)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
|
||||||
|
|
||||||
|
context.Writer
|
||||||
|
.WriteStartAssignment(tagHelperVariableName)
|
||||||
|
.WriteStartMethodInvocation(
|
||||||
|
CreateTagHelperMethodName,
|
||||||
|
"global::" + node.TagHelperTypeName)
|
||||||
|
.WriteEndMethodInvocation();
|
||||||
|
|
||||||
|
context.Writer.WriteInstanceMethodInvocation(
|
||||||
|
ExecutionContextVariableName,
|
||||||
|
ExecutionContextAddMethodName,
|
||||||
|
tagHelperVariableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void WriteExecuteTagHelpers(CSharpRenderingContext context, ExecuteTagHelpersIRNode node)
|
public override void WriteExecuteTagHelpers(CSharpRenderingContext context, ExecuteTagHelpersIRNode node)
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,32 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
|
||||||
Assert.Equal(
|
Assert.Equal(
|
||||||
@"private global::PTagHelper __PTagHelper = null;
|
@"private global::PTagHelper __PTagHelper = null;
|
||||||
private global::MyTagHelper __MyTagHelper = null;
|
private global::MyTagHelper __MyTagHelper = null;
|
||||||
|
",
|
||||||
|
csharp,
|
||||||
|
ignoreLineEndingDifferences: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WriteCreateTagHelper_RendersCorrectly_UsesSpecifiedTagHelperType()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var writer = new DesignTimeTagHelperWriter();
|
||||||
|
var context = new CSharpRenderingContext()
|
||||||
|
{
|
||||||
|
Writer = new Legacy.CSharpCodeWriter(),
|
||||||
|
};
|
||||||
|
var node = new CreateTagHelperIRNode()
|
||||||
|
{
|
||||||
|
TagHelperTypeName = "TestNamespace.MyTagHelper"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Act
|
||||||
|
writer.WriteCreateTagHelper(context, node);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var csharp = context.Writer.Builder.ToString();
|
||||||
|
Assert.Equal(
|
||||||
|
@"__TestNamespace_MyTagHelper = CreateTagHelper<global::TestNamespace.MyTagHelper>();
|
||||||
",
|
",
|
||||||
csharp,
|
csharp,
|
||||||
ignoreLineEndingDifferences: true);
|
ignoreLineEndingDifferences: true);
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,33 @@ private global::MyTagHelper __MyTagHelper = null;
|
||||||
@"__tagHelperExecutionContext = __tagHelperScopeManager.Begin(""p"", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.SelfClosing, ""test"", async() => {
|
@"__tagHelperExecutionContext = __tagHelperScopeManager.Begin(""p"", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.SelfClosing, ""test"", async() => {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
",
|
||||||
|
csharp,
|
||||||
|
ignoreLineEndingDifferences: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WriteCreateTagHelper_RendersCorrectly_UsesSpecifiedTagHelperType()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var writer = new RuntimeTagHelperWriter();
|
||||||
|
var context = new CSharpRenderingContext()
|
||||||
|
{
|
||||||
|
Writer = new Legacy.CSharpCodeWriter(),
|
||||||
|
};
|
||||||
|
var node = new CreateTagHelperIRNode()
|
||||||
|
{
|
||||||
|
TagHelperTypeName = "TestNamespace.MyTagHelper"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Act
|
||||||
|
writer.WriteCreateTagHelper(context, node);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var csharp = context.Writer.Builder.ToString();
|
||||||
|
Assert.Equal(
|
||||||
|
@"__TestNamespace_MyTagHelper = CreateTagHelper<global::TestNamespace.MyTagHelper>();
|
||||||
|
__tagHelperExecutionContext.Add(__TestNamespace_MyTagHelper);
|
||||||
",
|
",
|
||||||
csharp,
|
csharp,
|
||||||
ignoreLineEndingDifferences: true);
|
ignoreLineEndingDifferences: true);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue