Changes to support design time code generation in Mvc
This commit is contained in:
parent
c9341ee3d7
commit
3572b0f3f3
|
|
@ -65,7 +65,8 @@ namespace Microsoft.AspNet.Razor.CodeGenerators
|
||||||
var csharpCodeVisitor = CreateCSharpCodeVisitor(writer, Context);
|
var csharpCodeVisitor = CreateCSharpCodeVisitor(writer, Context);
|
||||||
|
|
||||||
new CSharpTypeMemberVisitor(csharpCodeVisitor, writer, Context).Accept(Tree.Chunks);
|
new CSharpTypeMemberVisitor(csharpCodeVisitor, writer, Context).Accept(Tree.Chunks);
|
||||||
new CSharpDesignTimeHelpersVisitor(csharpCodeVisitor, writer, Context).AcceptTree(Tree);
|
CreateCSharpDesignTimeCodeVisitor(csharpCodeVisitor, writer, Context)
|
||||||
|
.AcceptTree(Tree);
|
||||||
new CSharpTagHelperFieldDeclarationVisitor(writer, Context).Accept(Tree.Chunks);
|
new CSharpTagHelperFieldDeclarationVisitor(writer, Context).Accept(Tree.Chunks);
|
||||||
|
|
||||||
BuildConstructor(writer);
|
BuildConstructor(writer);
|
||||||
|
|
@ -87,8 +88,9 @@ namespace Microsoft.AspNet.Razor.CodeGenerators
|
||||||
return new CodeGeneratorResult(writer.GenerateCode(), writer.LineMappingManager.Mappings);
|
return new CodeGeneratorResult(writer.GenerateCode(), writer.LineMappingManager.Mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual CSharpCodeVisitor CreateCSharpCodeVisitor(CSharpCodeWriter writer,
|
protected virtual CSharpCodeVisitor CreateCSharpCodeVisitor(
|
||||||
CodeGeneratorContext context)
|
CSharpCodeWriter writer,
|
||||||
|
CodeGeneratorContext context)
|
||||||
{
|
{
|
||||||
if (writer == null)
|
if (writer == null)
|
||||||
{
|
{
|
||||||
|
|
@ -103,6 +105,29 @@ namespace Microsoft.AspNet.Razor.CodeGenerators
|
||||||
return new CSharpCodeVisitor(writer, context);
|
return new CSharpCodeVisitor(writer, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual CSharpDesignTimeCodeVisitor CreateCSharpDesignTimeCodeVisitor(
|
||||||
|
CSharpCodeVisitor csharpCodeVisitor,
|
||||||
|
CSharpCodeWriter writer,
|
||||||
|
CodeGeneratorContext context)
|
||||||
|
{
|
||||||
|
if (csharpCodeVisitor == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(csharpCodeVisitor));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (writer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(writer));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (context == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CSharpDesignTimeCodeVisitor(csharpCodeVisitor, writer, context);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual CSharpCodeWritingScope BuildClassDeclaration(CSharpCodeWriter writer)
|
protected virtual CSharpCodeWritingScope BuildClassDeclaration(CSharpCodeWriter writer)
|
||||||
{
|
{
|
||||||
var baseTypeVisitor = new CSharpBaseTypeVisitor(writer, Context);
|
var baseTypeVisitor = new CSharpBaseTypeVisitor(writer, Context);
|
||||||
|
|
|
||||||
|
|
@ -8,22 +8,19 @@ using Microsoft.AspNet.Razor.Chunks;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Razor.CodeGenerators.Visitors
|
namespace Microsoft.AspNet.Razor.CodeGenerators.Visitors
|
||||||
{
|
{
|
||||||
public class CSharpDesignTimeHelpersVisitor : CodeVisitor<CSharpCodeWriter>
|
public class CSharpDesignTimeCodeVisitor : CodeVisitor<CSharpCodeWriter>
|
||||||
{
|
{
|
||||||
internal const string InheritsHelper = "__inheritsHelper";
|
private const string InheritsHelper = "__inheritsHelper";
|
||||||
internal const string DesignTimeHelperMethodName = "__RazorDesignTimeHelpers__";
|
private const string DesignTimeHelperMethodName = "__RazorDesignTimeHelpers__";
|
||||||
|
|
||||||
private const string TagHelperDirectiveSyntaxHelper = "__tagHelperDirectiveSyntaxHelper";
|
private const string TagHelperDirectiveSyntaxHelper = "__tagHelperDirectiveSyntaxHelper";
|
||||||
private const int DisableVariableNamingWarnings = 219;
|
private const int DisableVariableNamingWarnings = 219;
|
||||||
|
|
||||||
private readonly CSharpCodeVisitor _csharpCodeVisitor;
|
|
||||||
|
|
||||||
private bool _initializedTagHelperDirectiveSyntaxHelper;
|
private bool _initializedTagHelperDirectiveSyntaxHelper;
|
||||||
|
|
||||||
public CSharpDesignTimeHelpersVisitor(CSharpCodeVisitor csharpCodeVisitor,
|
public CSharpDesignTimeCodeVisitor(
|
||||||
CSharpCodeWriter writer,
|
CSharpCodeVisitor csharpCodeVisitor,
|
||||||
CodeGeneratorContext context)
|
CSharpCodeWriter writer,
|
||||||
|
CodeGeneratorContext context)
|
||||||
: base(writer, context)
|
: base(writer, context)
|
||||||
{
|
{
|
||||||
if (csharpCodeVisitor == null)
|
if (csharpCodeVisitor == null)
|
||||||
|
|
@ -31,19 +28,11 @@ namespace Microsoft.AspNet.Razor.CodeGenerators.Visitors
|
||||||
throw new ArgumentNullException(nameof(csharpCodeVisitor));
|
throw new ArgumentNullException(nameof(csharpCodeVisitor));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (writer == null)
|
CSharpCodeVisitor = csharpCodeVisitor;
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(writer));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (context == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
_csharpCodeVisitor = csharpCodeVisitor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CSharpCodeVisitor CSharpCodeVisitor { get; }
|
||||||
|
|
||||||
public void AcceptTree(ChunkTree tree)
|
public void AcceptTree(ChunkTree tree)
|
||||||
{
|
{
|
||||||
if (Context.Host.DesignTimeMode)
|
if (Context.Host.DesignTimeMode)
|
||||||
|
|
@ -52,17 +41,25 @@ namespace Microsoft.AspNet.Razor.CodeGenerators.Visitors
|
||||||
{
|
{
|
||||||
using (Writer.BuildDisableWarningScope(DisableVariableNamingWarnings))
|
using (Writer.BuildDisableWarningScope(DisableVariableNamingWarnings))
|
||||||
{
|
{
|
||||||
Accept(tree.Chunks);
|
AcceptTreeCore(tree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void AcceptTreeCore(ChunkTree tree)
|
||||||
|
{
|
||||||
|
Accept(tree.Chunks);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Visit(SetBaseTypeChunk chunk)
|
protected override void Visit(SetBaseTypeChunk chunk)
|
||||||
{
|
{
|
||||||
if (Context.Host.DesignTimeMode)
|
Debug.Assert(Context.Host.DesignTimeMode);
|
||||||
|
|
||||||
|
if (chunk.Start != SourceLocation.Undefined)
|
||||||
{
|
{
|
||||||
using (CSharpLineMappingWriter lineMappingWriter = Writer.BuildLineMapping(chunk.Start, chunk.TypeName.Length, Context.SourceFile))
|
using (var lineMappingWriter =
|
||||||
|
Writer.BuildLineMapping(chunk.Start, chunk.TypeName.Length, Context.SourceFile))
|
||||||
{
|
{
|
||||||
Writer.Indent(chunk.Start.CharacterIndex);
|
Writer.Indent(chunk.Start.CharacterIndex);
|
||||||
|
|
||||||
|
|
@ -105,7 +102,7 @@ namespace Microsoft.AspNet.Razor.CodeGenerators.Visitors
|
||||||
|
|
||||||
// The parsing mechanism for a TagHelper directive chunk (CSharpCodeParser.TagHelperDirective())
|
// The parsing mechanism for a TagHelper directive chunk (CSharpCodeParser.TagHelperDirective())
|
||||||
// removes quotes that surround the text.
|
// removes quotes that surround the text.
|
||||||
_csharpCodeVisitor.CreateExpressionCodeMapping(
|
CSharpCodeVisitor.CreateExpressionCodeMapping(
|
||||||
string.Format(CultureInfo.InvariantCulture, "\"{0}\"", text),
|
string.Format(CultureInfo.InvariantCulture, "\"{0}\"", text),
|
||||||
chunk);
|
chunk);
|
||||||
|
|
||||||
Loading…
Reference in New Issue