Add extensibility point for TH attribute code gen.
- Enabled the CSharpCodeBuilder to create the CSharpCodeVisitor which exposes a CSharpTagHelperCodeRenderer which is indirectly used to render attribute values. - Fixed up some existing classes that just new'd up the CSharpCodeVisitor class to instead take in the decorated version. #119
This commit is contained in:
parent
c3b51cbbdf
commit
2b6b437952
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
||||
/// <summary>
|
||||
/// Renders the code for the given <paramref name="chunk"/>.
|
||||
/// </summary>
|
||||
|
|
@ -431,7 +431,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
|||
private void RenderAttributeValue(TagHelperAttributeDescriptor attributeDescriptor,
|
||||
Action<CSharpCodeWriter> valueRenderer)
|
||||
{
|
||||
_attributeValueCodeRenderer.RenderAttributeValue(attributeDescriptor, _writer, _context, valueRenderer);
|
||||
AttributeValueCodeRenderer.RenderAttributeValue(attributeDescriptor, _writer, _context, valueRenderer);
|
||||
}
|
||||
|
||||
private static void RenderBufferedAttributeValueAccessor(CSharpCodeWriter writer)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
|||
/// <param name="context">A <see cref="CodeGeneratorContext"/> instance that contains information about
|
||||
/// the current code generation process.</param>
|
||||
/// <param name="renderAttributeValue"><see cref="Action"/> that renders the raw value of the HTML attribute.</param>
|
||||
public void RenderAttributeValue([NotNull] TagHelperAttributeDescriptor attributeDescriptor,
|
||||
[NotNull] CSharpCodeWriter writer,
|
||||
[NotNull] CodeBuilderContext context,
|
||||
[NotNull] Action<CSharpCodeWriter> renderAttributeValue)
|
||||
public virtual void RenderAttributeValue([NotNull] TagHelperAttributeDescriptor attributeDescriptor,
|
||||
[NotNull] CSharpCodeWriter writer,
|
||||
[NotNull] CodeBuilderContext context,
|
||||
[NotNull] Action<CSharpCodeWriter> renderAttributeValue)
|
||||
{
|
||||
renderAttributeValue(writer);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue