Skip to content
This repository was archived by the owner on Dec 19, 2018. It is now read-only.

Commit 7eb0f98

Browse files
author
N. Taylor Mullen
committed
Addressed code review comments
1 parent 47bd7e4 commit 7eb0f98

File tree

5 files changed

+66
-67
lines changed

5 files changed

+66
-67
lines changed

src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ public override CodeBuilderResult Build()
3939
writer.WriteLine("private static object @__o;");
4040
}
4141

42-
var csharpCodeVisitor = DecorateCSharpCodeVisitor(writer,
43-
Context,
44-
new CSharpCodeVisitor(writer, Context));
42+
var csharpCodeVisitor = CreateCSharpCodeVisitor(writer, Context);
4543

4644
new CSharpHelperVisitor(csharpCodeVisitor, writer, Context).Accept(Tree.Chunks);
4745
new CSharpTypeMemberVisitor(csharpCodeVisitor, writer, Context).Accept(Tree.Chunks);
@@ -68,11 +66,10 @@ public override CodeBuilderResult Build()
6866
return new CodeBuilderResult(writer.GenerateCode(), writer.LineMappingManager.Mappings);
6967
}
7068

71-
protected virtual CSharpCodeVisitor DecorateCSharpCodeVisitor([NotNull] CSharpCodeWriter writer,
72-
[NotNull] CodeBuilderContext context,
73-
[NotNull] CSharpCodeVisitor incomingVisitor)
69+
protected virtual CSharpCodeVisitor CreateCSharpCodeVisitor([NotNull] CSharpCodeWriter writer,
70+
[NotNull] CodeBuilderContext context)
7471
{
75-
return incomingVisitor;
72+
return new CSharpCodeVisitor(writer, context);
7673
}
7774

7875
protected virtual CSharpCodeWritingScope BuildClassDeclaration(CSharpCodeWriter writer)

src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public class CSharpTagHelperCodeRenderer
2525
private static readonly TagHelperAttributeDescriptorComparer AttributeDescriptorComparer =
2626
new TagHelperAttributeDescriptorComparer();
2727

28-
private readonly TagHelperAttributeValueCodeRenderer _attributeValueCodeRenderer;
2928
private readonly CSharpCodeWriter _writer;
3029
private readonly CodeBuilderContext _context;
3130
private readonly IChunkVisitor _bodyVisitor;
@@ -39,17 +38,18 @@ public class CSharpTagHelperCodeRenderer
3938
/// <param name="context">A <see cref="CodeBuilderContext"/> instance that contains information about
4039
/// the current code generation process.</param>
4140
public CSharpTagHelperCodeRenderer([NotNull] IChunkVisitor bodyVisitor,
42-
[NotNull] TagHelperAttributeValueCodeRenderer attributeValueCodeRenderer,
4341
[NotNull] CSharpCodeWriter writer,
4442
[NotNull] CodeBuilderContext context)
4543
{
4644
_bodyVisitor = bodyVisitor;
47-
_attributeValueCodeRenderer = attributeValueCodeRenderer;
4845
_writer = writer;
4946
_context = context;
5047
_tagHelperContext = context.Host.GeneratedClassContext.GeneratedTagHelperContext;
48+
AttributeValueCodeRenderer = new TagHelperAttributeValueCodeRenderer();
5149
}
5250

51+
public TagHelperAttributeValueCodeRenderer AttributeValueCodeRenderer { get; set; }
52+
5353
/// <summary>
5454
/// Renders the code for the given <paramref name="chunk"/>.
5555
/// </summary>
@@ -420,7 +420,7 @@ private void BuildBufferedWritingScope(Action renderCode)
420420
private void RenderAttributeValue(TagHelperAttributeDescriptor attributeDescriptor,
421421
Action<CSharpCodeWriter> valueRenderer)
422422
{
423-
_attributeValueCodeRenderer.RenderAttributeValue(attributeDescriptor, _writer, _context, valueRenderer);
423+
AttributeValueCodeRenderer.RenderAttributeValue(attributeDescriptor, _writer, _context, valueRenderer);
424424
}
425425

426426
private static bool IsStringAttribute(TagHelperAttributeDescriptor attributeDescriptor)

src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpCodeVisitor.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ public CSharpCodeVisitor(CSharpCodeWriter writer, CodeBuilderContext context)
2222
: base(writer, context)
2323
{
2424
_paddingBuilder = new CSharpPaddingBuilder(context.Host);
25-
TagHelperRenderer = new CSharpTagHelperCodeRenderer(this,
26-
new TagHelperAttributeValueCodeRenderer(),
27-
writer,
28-
context);
25+
TagHelperRenderer = new CSharpTagHelperCodeRenderer(this, writer, context);
2926
}
3027

3128
public CSharpTagHelperCodeRenderer TagHelperRenderer { get; set; }

test/Microsoft.AspNet.Razor.Test/Generator/TagHelperAttributeCodeGeneratorTest.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ public class TagHelperAttributeCodeGeneratorTests : TagHelperTestBase
1717
[Fact]
1818
public void TagHelpers_CanReplaceAttributeCodeGeneratorLogic()
1919
{
20+
// Arrange
2021
var inputTypePropertyInfo = new Mock<PropertyInfo>();
2122
inputTypePropertyInfo.Setup(ipi => ipi.PropertyType).Returns(typeof(string));
2223
inputTypePropertyInfo.Setup(ipi => ipi.Name).Returns("Type");
2324
var checkedPropertyInfo = new Mock<PropertyInfo>();
2425
checkedPropertyInfo.Setup(ipi => ipi.PropertyType).Returns(typeof(bool));
2526
checkedPropertyInfo.Setup(ipi => ipi.Name).Returns("Checked");
26-
// Arrange
2727
var tagHelperProvider = new TagHelperDescriptorProvider(
2828
new TagHelperDescriptor[]
2929
{
@@ -73,28 +73,25 @@ public AttributeCodeGeneratorReplacingCodeBuilder(CodeBuilderContext context)
7373
{
7474
}
7575

76-
protected override CSharpCodeVisitor DecorateCSharpCodeVisitor([NotNull] CSharpCodeWriter writer,
77-
[NotNull] CodeBuilderContext context,
78-
[NotNull] CSharpCodeVisitor incomingVisitor)
76+
protected override CSharpCodeVisitor CreateCSharpCodeVisitor([NotNull] CSharpCodeWriter writer,
77+
[NotNull] CodeBuilderContext context)
7978
{
80-
incomingVisitor.TagHelperRenderer =
81-
new CSharpTagHelperCodeRenderer(incomingVisitor,
82-
new CustomTagHelperAttributeCodeGenerator(),
83-
writer,
84-
context);
79+
var bodyVisitor = base.CreateCSharpCodeVisitor(writer, context);
80+
81+
bodyVisitor.TagHelperRenderer.AttributeValueCodeRenderer = new CustomTagHelperAttributeCodeGenerator();
8582

86-
return base.DecorateCSharpCodeVisitor(writer, context, incomingVisitor);
83+
return bodyVisitor;
8784
}
8885
}
8986

9087
private class CustomTagHelperAttributeCodeGenerator : TagHelperAttributeValueCodeRenderer
9188
{
9289
public override void RenderAttributeValue([NotNull]TagHelperAttributeDescriptor attributeInfo,
9390
[NotNull]CSharpCodeWriter writer,
94-
[NotNull]CodeGeneratorContext context,
91+
[NotNull]CodeBuilderContext context,
9592
[NotNull]Action<CSharpCodeWriter> renderAttributeValue)
9693
{
97-
writer.Write("**From custom attribute code generator**: ");
94+
writer.Write("**From custom attribute code renderer**: ");
9895

9996
base.RenderAttributeValue(attributeInfo, writer, context, renderAttributeValue);
10097
}

test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ namespace TestOutput
44

55
public class BasicTagHelpers
66
{
7-
private TagHelperManager __tagHelperManager { get; set; }
7+
private ITagHelperRunner __tagHelperRunner { get; set; }
8+
private ITagHelperScopeManager __tagHelperScopeManager { get; set; }
89
#line hidden
910
public BasicTagHelpers()
1011
{
@@ -13,50 +14,57 @@ public BasicTagHelpers()
1314
#pragma warning disable 1998
1415
public override async Task ExecuteAsync()
1516
{
16-
var __tagHelperAttributeValue = string.Empty;
17-
PTagHelper __p_PTagHelper;
18-
InputTagHelper __input_InputTagHelper;
19-
InputTagHelper2 __input_InputTagHelper2;
17+
var __tagHelperBufferedStringValue = string.Empty;
18+
TagHelperExecutionContext __executionContext = null;
19+
PTagHelper __PTagHelper;
20+
InputTagHelper __InputTagHelper;
21+
InputTagHelper2 __InputTagHelper2;
2022
WriteLiteral("<div class=\"randomNonTagHelperAttribute\">\r\n ");
21-
__p_PTagHelper = __tagHelperManager.InstantiateTagHelper<PTagHelper>();
22-
__tagHelperManager.AddHtmlAttribute("class", "Hello World");
23-
__tagHelperManager.StartTagHelpersScope("p");
24-
await __tagHelperManager.ExecuteTagHelpersAsync();
25-
WriteLiteral(__tagHelperManager.GenerateTagStart());
23+
__executionContext = __tagHelperScopeManager.Begin("p");
24+
__PTagHelper = CreateTagHelper<PTagHelper>();
25+
__executionContext.Add(__PTagHelper);
26+
__executionContext.AddHtmlAttribute("class", "Hello World");
27+
__executionContext.Output = await __tagHelperRunner.RunAsync(__executionContext);
28+
WriteLiteral(__executionContext.Output.GenerateTagStart());
2629
WriteLiteral("\r\n ");
27-
__p_PTagHelper = __tagHelperManager.InstantiateTagHelper<PTagHelper>();
28-
__tagHelperManager.StartTagHelpersScope("p");
29-
await __tagHelperManager.ExecuteTagHelpersAsync();
30-
WriteLiteral(__tagHelperManager.GenerateTagStart());
31-
WriteLiteral(__tagHelperManager.GenerateTagEnd());
32-
__tagHelperManager.EndTagHelpersScope();
30+
__executionContext = __tagHelperScopeManager.Begin("p");
31+
__PTagHelper = CreateTagHelper<PTagHelper>();
32+
__executionContext.Add(__PTagHelper);
33+
__executionContext.Output = await __tagHelperRunner.RunAsync(__executionContext);
34+
WriteLiteral(__executionContext.Output.GenerateTagStart());
35+
WriteLiteral(__executionContext.Output.GenerateTagEnd());
36+
__executionContext = __tagHelperScopeManager.End();
3337
WriteLiteral("\r\n ");
34-
__input_InputTagHelper = __tagHelperManager.InstantiateTagHelper<InputTagHelper>();
35-
__input_InputTagHelper.Type = **From custom attribute code generator**: "text";
36-
__tagHelperManager.AddTagHelperAttribute("type", __input_InputTagHelper.Type);
37-
__input_InputTagHelper2 = __tagHelperManager.InstantiateTagHelper<InputTagHelper2>();
38-
__input_InputTagHelper2.Type = __input_InputTagHelper.Type;
39-
__tagHelperManager.StartTagHelpersScope("input");
40-
await __tagHelperManager.ExecuteTagHelpersAsync();
41-
WriteLiteral(__tagHelperManager.GenerateTagStart());
42-
WriteLiteral(__tagHelperManager.GenerateTagEnd());
43-
__tagHelperManager.EndTagHelpersScope();
38+
__executionContext = __tagHelperScopeManager.Begin("input");
39+
__InputTagHelper = CreateTagHelper<InputTagHelper>();
40+
__executionContext.Add(__InputTagHelper);
41+
__InputTagHelper.Type = **From custom attribute code renderer**: "text";
42+
__executionContext.AddTagHelperAttribute("type", __InputTagHelper.Type);
43+
__InputTagHelper2 = CreateTagHelper<InputTagHelper2>();
44+
__executionContext.Add(__InputTagHelper2);
45+
__InputTagHelper2.Type = __InputTagHelper.Type;
46+
__executionContext.Output = await __tagHelperRunner.RunAsync(__executionContext);
47+
WriteLiteral(__executionContext.Output.GenerateTagStart());
48+
WriteLiteral(__executionContext.Output.GenerateTagEnd());
49+
__executionContext = __tagHelperScopeManager.End();
4450
WriteLiteral("\r\n ");
45-
__input_InputTagHelper = __tagHelperManager.InstantiateTagHelper<InputTagHelper>();
46-
__input_InputTagHelper.Type = **From custom attribute code generator**: "checkbox";
47-
__tagHelperManager.AddTagHelperAttribute("type", __input_InputTagHelper.Type);
48-
__input_InputTagHelper2 = __tagHelperManager.InstantiateTagHelper<InputTagHelper2>();
49-
__input_InputTagHelper2.Type = __input_InputTagHelper.Type;
50-
__input_InputTagHelper2.Checked = **From custom attribute code generator**: true;
51-
__tagHelperManager.AddTagHelperAttribute("checked", __input_InputTagHelper2.Checked);
52-
__tagHelperManager.StartTagHelpersScope("input");
53-
await __tagHelperManager.ExecuteTagHelpersAsync();
54-
WriteLiteral(__tagHelperManager.GenerateTagStart());
55-
WriteLiteral(__tagHelperManager.GenerateTagEnd());
56-
__tagHelperManager.EndTagHelpersScope();
51+
__executionContext = __tagHelperScopeManager.Begin("input");
52+
__InputTagHelper = CreateTagHelper<InputTagHelper>();
53+
__executionContext.Add(__InputTagHelper);
54+
__InputTagHelper.Type = **From custom attribute code renderer**: "checkbox";
55+
__executionContext.AddTagHelperAttribute("type", __InputTagHelper.Type);
56+
__InputTagHelper2 = CreateTagHelper<InputTagHelper2>();
57+
__executionContext.Add(__InputTagHelper2);
58+
__InputTagHelper2.Type = __InputTagHelper.Type;
59+
__InputTagHelper2.Checked = **From custom attribute code renderer**: true;
60+
__executionContext.AddTagHelperAttribute("checked", __InputTagHelper2.Checked);
61+
__executionContext.Output = await __tagHelperRunner.RunAsync(__executionContext);
62+
WriteLiteral(__executionContext.Output.GenerateTagStart());
63+
WriteLiteral(__executionContext.Output.GenerateTagEnd());
64+
__executionContext = __tagHelperScopeManager.End();
5765
WriteLiteral("\r\n ");
58-
WriteLiteral(__tagHelperManager.GenerateTagEnd());
59-
__tagHelperManager.EndTagHelpersScope();
66+
WriteLiteral(__executionContext.Output.GenerateTagEnd());
67+
__executionContext = __tagHelperScopeManager.End();
6068
WriteLiteral("\r\n</div>");
6169
}
6270
#pragma warning restore 1998

0 commit comments

Comments
 (0)