diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs
index 97c4987f4f..3cb2ee5ccd 100644
--- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs
+++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs
@@ -52,8 +52,10 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
writer.WriteLine("private static object @__o;");
}
- new CSharpHelperVisitor(writer, Context).Accept(Tree.Chunks);
- new CSharpTypeMemberVisitor(writer, Context).Accept(Tree.Chunks);
+ var csharpCodeVisitor = CreateCSharpCodeVisitor(writer, Context);
+
+ new CSharpHelperVisitor(csharpCodeVisitor, writer, Context).Accept(Tree.Chunks);
+ new CSharpTypeMemberVisitor(csharpCodeVisitor, writer, Context).Accept(Tree.Chunks);
new CSharpDesignTimeHelpersVisitor(writer, Context).AcceptTree(Tree);
new CSharpTagHelperFieldDeclarationVisitor(writer, Context).Accept(Tree.Chunks);
@@ -66,7 +68,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
{
using (writer.BuildMethodDeclaration("public override async", "Task", Host.GeneratedClassContext.ExecuteMethodName))
{
- new CSharpCodeVisitor(writer, Context).Accept(Tree.Chunks);
+ csharpCodeVisitor.Accept(Tree.Chunks);
}
}
}
@@ -75,6 +77,12 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
return new CodeBuilderResult(writer.GenerateCode(), writer.LineMappingManager.Mappings);
}
+ protected virtual CSharpCodeVisitor CreateCSharpCodeVisitor([NotNull] CSharpCodeWriter writer,
+ [NotNull] CodeBuilderContext context)
+ {
+ return new CSharpCodeVisitor(writer, context);
+ }
+
protected virtual CSharpCodeWritingScope BuildClassDeclaration(CSharpCodeWriter writer)
{
var baseTypeVisitor = new CSharpBaseTypeVisitor(writer, Context);
diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs
index a4efa1ff8b..83af0e72e7 100644
--- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs
+++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs
@@ -22,9 +22,6 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
private static readonly TagHelperAttributeDescriptorComparer AttributeDescriptorComparer =
new TagHelperAttributeDescriptorComparer();
- // TODO: The work to properly implement this will be done in: https://github.com/aspnet/Razor/issues/74
- private readonly TagHelperAttributeValueCodeRenderer _attributeValueCodeRenderer =
- new TagHelperAttributeValueCodeRenderer();
private readonly CSharpCodeWriter _writer;
private readonly CodeBuilderContext _context;
private readonly IChunkVisitor _bodyVisitor;
@@ -41,12 +38,15 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
[NotNull] CSharpCodeWriter writer,
[NotNull] CodeBuilderContext context)
{
+ _bodyVisitor = bodyVisitor;
_writer = writer;
_context = context;
- _bodyVisitor = bodyVisitor;
_tagHelperContext = context.Host.GeneratedClassContext.GeneratedTagHelperContext;
+ AttributeValueCodeRenderer = new TagHelperAttributeValueCodeRenderer();
}
+ public TagHelperAttributeValueCodeRenderer AttributeValueCodeRenderer { get; set; }
+
///
/// Renders the code for the given .
///
@@ -431,7 +431,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
private void RenderAttributeValue(TagHelperAttributeDescriptor attributeDescriptor,
Action valueRenderer)
{
- _attributeValueCodeRenderer.RenderAttributeValue(attributeDescriptor, _writer, _context, valueRenderer);
+ AttributeValueCodeRenderer.RenderAttributeValue(attributeDescriptor, _writer, _context, valueRenderer);
}
private static void RenderBufferedAttributeValueAccessor(CSharpCodeWriter writer)
diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpCodeVisitor.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpCodeVisitor.cs
index 49e308e116..3162bc5e26 100644
--- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpCodeVisitor.cs
+++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpCodeVisitor.cs
@@ -17,18 +17,19 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
private const string TemplateWriterName = "__razor_template_writer";
private CSharpPaddingBuilder _paddingBuilder;
- private CSharpTagHelperCodeRenderer _tagHelperCodeRenderer;
public CSharpCodeVisitor(CSharpCodeWriter writer, CodeBuilderContext context)
: base(writer, context)
{
_paddingBuilder = new CSharpPaddingBuilder(context.Host);
- _tagHelperCodeRenderer = new CSharpTagHelperCodeRenderer(this, writer, context);
+ TagHelperRenderer = new CSharpTagHelperCodeRenderer(this, writer, context);
}
+ public CSharpTagHelperCodeRenderer TagHelperRenderer { get; set; }
+
protected override void Visit(TagHelperChunk chunk)
{
- _tagHelperCodeRenderer.RenderTagHelper(chunk);
+ TagHelperRenderer.RenderTagHelper(chunk);
}
protected override void Visit(ChunkBlock chunk)
diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpHelperVisitor.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpHelperVisitor.cs
index 9f4785713e..2f68e86aae 100644
--- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpHelperVisitor.cs
+++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpHelperVisitor.cs
@@ -9,12 +9,14 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
{
private const string HelperWriterName = "__razor_helper_writer";
- private CSharpCodeVisitor _codeVisitor;
+ private CSharpCodeVisitor _csharpCodeVisitor;
- public CSharpHelperVisitor(CSharpCodeWriter writer, CodeBuilderContext context)
+ public CSharpHelperVisitor([NotNull] CSharpCodeVisitor csharpCodeVisitor,
+ [NotNull] CSharpCodeWriter writer,
+ [NotNull] CodeBuilderContext context)
: base(writer, context)
{
- _codeVisitor = new CSharpCodeVisitor(writer, context);
+ _csharpCodeVisitor = csharpCodeVisitor;
}
protected override void Visit(HelperChunk chunk)
@@ -46,7 +48,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
Context.TargetWriterName = HelperWriterName;
// Generate children code
- _codeVisitor.Accept(chunk.Children);
+ _csharpCodeVisitor.Accept(chunk.Children);
Context.TargetWriterName = currentTargetWriterName;
diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTypeMemberVisitor.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTypeMemberVisitor.cs
index acff74340e..dc26beaced 100644
--- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTypeMemberVisitor.cs
+++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTypeMemberVisitor.cs
@@ -9,10 +9,12 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
{
private CSharpCodeVisitor _csharpCodeVisitor;
- public CSharpTypeMemberVisitor(CSharpCodeWriter writer, CodeBuilderContext context)
+ public CSharpTypeMemberVisitor([NotNull] CSharpCodeVisitor csharpCodeVisitor,
+ [NotNull] CSharpCodeWriter writer,
+ [NotNull] CodeBuilderContext context)
: base(writer, context)
{
- _csharpCodeVisitor = new CSharpCodeVisitor(writer, context);
+ _csharpCodeVisitor = csharpCodeVisitor;
}
protected override void Visit(TypeMemberChunk chunk)
diff --git a/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeValueCodeRenderer.cs b/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeValueCodeRenderer.cs
index e5334c99c5..8088892ee2 100644
--- a/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeValueCodeRenderer.cs
+++ b/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeValueCodeRenderer.cs
@@ -2,9 +2,6 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
-using System.Diagnostics;
-using System.Linq;
-using System.Reflection;
using Microsoft.AspNet.Razor.Generator;
using Microsoft.AspNet.Razor.Generator.Compiler.CSharp;
@@ -24,10 +21,10 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// A instance that contains information about
/// the current code generation process.
/// that renders the raw value of the HTML attribute.
- public void RenderAttributeValue([NotNull] TagHelperAttributeDescriptor attributeDescriptor,
- [NotNull] CSharpCodeWriter writer,
- [NotNull] CodeBuilderContext context,
- [NotNull] Action renderAttributeValue)
+ public virtual void RenderAttributeValue([NotNull] TagHelperAttributeDescriptor attributeDescriptor,
+ [NotNull] CSharpCodeWriter writer,
+ [NotNull] CodeBuilderContext context,
+ [NotNull] Action renderAttributeValue)
{
renderAttributeValue(writer);
}