diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveSyntaxTreePass.cs b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveSyntaxTreePass.cs
index ed33aa4ae4..db5383cd62 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveSyntaxTreePass.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveSyntaxTreePass.cs
@@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution
tree.Root.Accept(this);
}
- public override void VisitStartDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
+ public override void VisitDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
{
if (_nestedLevel > 0)
{
@@ -51,10 +51,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution
}
_nestedLevel++;
- }
- public override void VisitEndDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
- {
+ VisitDefault(block);
+
_nestedLevel--;
}
}
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs
index b7bc7875fa..53ec9cb731 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs
@@ -96,30 +96,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution
}
}
- public override void VisitDirectiveToken(DirectiveTokenChunkGenerator chunkGenerator, Span span)
- {
- _builder.Add(new DirectiveTokenIRNode()
- {
- Content = span.Content,
- Descriptor = chunkGenerator.Descriptor,
- Source = BuildSourceSpanFromNode(span),
- });
- }
-
- public override void VisitStartDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
- {
- _builder.Push(new DirectiveIRNode()
- {
- Name = chunkGenerator.Descriptor.Name,
- Descriptor = chunkGenerator.Descriptor,
- });
- }
-
- public override void VisitEndDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
- {
- _builder.Pop();
- }
-
public override void VisitAddTagHelperSpan(AddTagHelperChunkGenerator chunkGenerator, Span span)
{
_builder.Push(new DirectiveIRNode()
@@ -211,25 +187,32 @@ namespace Microsoft.AspNetCore.Razor.Evolution
{
if (_insideLineDirective)
{
- base.VisitDirectiveToken(chunkGenerator, span);
+ _builder.Add(new DirectiveTokenIRNode()
+ {
+ Content = span.Content,
+ Descriptor = chunkGenerator.Descriptor,
+ Source = BuildSourceSpanFromNode(span),
+ });
}
}
- public override void VisitStartDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
+ public override void VisitDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
{
if (chunkGenerator.Descriptor.Kind == DirectiveDescriptorKind.SingleLine)
{
_insideLineDirective = true;
- base.VisitStartDirectiveBlock(chunkGenerator, block);
- }
- }
- public override void VisitEndDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
- {
- if (_insideLineDirective)
- {
+ _builder.Push(new DirectiveIRNode()
+ {
+ Name = chunkGenerator.Descriptor.Name,
+ Descriptor = chunkGenerator.Descriptor,
+ });
+
+ base.VisitDirectiveBlock(chunkGenerator, block);
+
+ _builder.Pop();
+
_insideLineDirective = false;
- base.VisitEndDirectiveBlock(chunkGenerator, block);
}
}
}
@@ -243,12 +226,35 @@ namespace Microsoft.AspNetCore.Razor.Evolution
{
}
+ public override void VisitDirectiveToken(DirectiveTokenChunkGenerator chunkGenerator, Span span)
+ {
+ _builder.Add(new DirectiveTokenIRNode()
+ {
+ Content = span.Content,
+ Descriptor = chunkGenerator.Descriptor,
+ Source = BuildSourceSpanFromNode(span),
+ });
+ }
+
+ public override void VisitDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
+ {
+ _builder.Push(new DirectiveIRNode()
+ {
+ Name = chunkGenerator.Descriptor.Name,
+ Descriptor = chunkGenerator.Descriptor,
+ });
+
+ VisitDefault(block);
+
+ _builder.Pop();
+ }
+
// Example
//
// Name=checked
// Prefix= checked="
// Suffix="
- public override void VisitStartAttributeBlock(AttributeBlockChunkGenerator chunkGenerator, Block block)
+ public override void VisitAttributeBlock(AttributeBlockChunkGenerator chunkGenerator, Block block)
{
_builder.Push(new HtmlAttributeIRNode()
{
@@ -257,10 +263,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution
Suffix = chunkGenerator.Suffix,
Source = BuildSourceSpanFromNode(block),
});
- }
- public override void VisitEndAttributeBlock(AttributeBlockChunkGenerator chunkGenerator, Block block)
- {
+ VisitDefault(block);
+
_builder.Pop();
}
@@ -268,17 +273,16 @@ namespace Microsoft.AspNetCore.Razor.Evolution
//
// Prefix= (space)
// Children will contain a token for @false.
- public override void VisitStartDynamicAttributeBlock(DynamicAttributeBlockChunkGenerator chunkGenerator, Block block)
+ public override void VisitDynamicAttributeBlock(DynamicAttributeBlockChunkGenerator chunkGenerator, Block block)
{
_builder.Push(new CSharpAttributeValueIRNode()
{
Prefix = chunkGenerator.Prefix,
Source = BuildSourceSpanFromNode(block),
});
- }
- public override void VisitEndDynamicAttributeBlock(DynamicAttributeBlockChunkGenerator chunkGenerator, Block block)
- {
+ VisitDefault(block);
+
_builder.Pop();
}
@@ -292,14 +296,15 @@ namespace Microsoft.AspNetCore.Razor.Evolution
});
}
- public override void VisitStartTemplateBlock(TemplateBlockChunkGenerator chunkGenerator, Block block)
+ public override void VisitTemplateBlock(TemplateBlockChunkGenerator chunkGenerator, Block block)
{
- _builder.Push(new TemplateIRNode());
- }
+ var templateNode = new TemplateIRNode();
+ _builder.Push(templateNode);
- public override void VisitEndTemplateBlock(TemplateBlockChunkGenerator chunkGenerator, Block block)
- {
- var templateNode = _builder.Pop();
+ VisitDefault(block);
+
+ _builder.Pop();
+
if (templateNode.Children.Count > 0)
{
var sourceRangeStart = templateNode
@@ -327,14 +332,14 @@ namespace Microsoft.AspNetCore.Razor.Evolution
// @DateTime.@*This is a comment*@Now
//
// We need to capture this in the IR so that we can give each piece the correct source mappings
- public override void VisitStartExpressionBlock(ExpressionChunkGenerator chunkGenerator, Block block)
+ public override void VisitExpressionBlock(ExpressionChunkGenerator chunkGenerator, Block block)
{
- _builder.Push(new CSharpExpressionIRNode());
- }
+ var expressionNode = new CSharpExpressionIRNode();
+ _builder.Push(expressionNode);
- public override void VisitEndExpressionBlock(ExpressionChunkGenerator chunkGenerator, Block block)
- {
- var expressionNode = _builder.Pop();
+ VisitDefault(block);
+
+ _builder.Pop();
if (expressionNode.Children.Count > 0)
{
@@ -445,7 +450,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution
}
}
- public override void VisitStartTagHelperBlock(TagHelperChunkGenerator chunkGenerator, Block block)
+ public override void VisitTagHelperBlock(TagHelperChunkGenerator chunkGenerator, Block block)
{
var tagHelperBlock = block as TagHelperBlock;
if (tagHelperBlock == null)
@@ -471,15 +476,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution
TagName = tagName,
TagMode = tagHelperBlock.TagMode
});
- }
- public override void VisitEndTagHelperBlock(TagHelperChunkGenerator chunkGenerator, Block block)
- {
- var tagHelperBlock = block as TagHelperBlock;
- if (tagHelperBlock == null)
- {
- return;
- }
+ VisitDefault(block);
_builder.Pop(); // Pop InitializeTagHelperStructureIRNode
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/AttributeBlockChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/AttributeBlockChunkGenerator.cs
index 544eb59bf3..ae55158a0e 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/AttributeBlockChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/AttributeBlockChunkGenerator.cs
@@ -36,14 +36,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
//context.ChunkTreeBuilder.EndParentChunk();
}
- public override void AcceptStart(ParserVisitor visitor, Block block)
+ public override void Accept(ParserVisitor visitor, Block block)
{
- visitor.VisitStartAttributeBlock(this, block);
- }
-
- public override void AcceptEnd(ParserVisitor visitor, Block block)
- {
- visitor.VisitEndAttributeBlock(this, block);
+ visitor.VisitAttributeBlock(this, block);
}
public override string ToString()
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DirectiveChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DirectiveChunkGenerator.cs
index b3d2570bd4..6e67cb13f4 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DirectiveChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DirectiveChunkGenerator.cs
@@ -17,15 +17,11 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
public DirectiveDescriptor Descriptor { get; }
- public override void AcceptStart(ParserVisitor visitor, Block block)
+ public override void Accept(ParserVisitor visitor, Block block)
{
- visitor.VisitStartDirectiveBlock(this, block);
+ visitor.VisitDirectiveBlock(this, block);
}
- public override void AcceptEnd(ParserVisitor visitor, Block block)
- {
- visitor.VisitEndDirectiveBlock(this, block);
- }
public override bool Equals(object obj)
{
var other = obj as DirectiveChunkGenerator;
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DynamicAttributeBlockChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DynamicAttributeBlockChunkGenerator.cs
index 735e81e3cb..7b60e9c8ed 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DynamicAttributeBlockChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/DynamicAttributeBlockChunkGenerator.cs
@@ -23,14 +23,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
public SourceLocation ValueStart { get; }
- public override void AcceptStart(ParserVisitor visitor, Block block)
+ public override void Accept(ParserVisitor visitor, Block block)
{
- visitor.VisitStartDynamicAttributeBlock(this, block);
- }
-
- public override void AcceptEnd(ParserVisitor visitor, Block block)
- {
- visitor.VisitEndDynamicAttributeBlock(this, block);
+ visitor.VisitDynamicAttributeBlock(this, block);
}
public override void GenerateStartParentChunk(Block target, ChunkGeneratorContext context)
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ExpressionChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ExpressionChunkGenerator.cs
index 08d7e3d1d1..f76d5829f4 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ExpressionChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ExpressionChunkGenerator.cs
@@ -29,14 +29,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
visitor.VisitExpressionSpan(this, span);
}
- public void AcceptStart(ParserVisitor visitor, Block block)
+ public void Accept(ParserVisitor visitor, Block block)
{
- visitor.VisitStartExpressionBlock(this, block);
- }
-
- public void AcceptEnd(ParserVisitor visitor, Block block)
- {
- visitor.VisitEndExpressionBlock(this, block);
+ visitor.VisitExpressionBlock(this, block);
}
public override string ToString()
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/IParentChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/IParentChunkGenerator.cs
index 072752042b..7f4b762c82 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/IParentChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/IParentChunkGenerator.cs
@@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
{
void GenerateStartParentChunk(Block target, ChunkGeneratorContext context);
void GenerateEndParentChunk(Block target, ChunkGeneratorContext context);
- void AcceptStart(ParserVisitor visitor, Block block);
- void AcceptEnd(ParserVisitor visitor, Block block);
+
+ void Accept(ParserVisitor visitor, Block block);
}
}
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParentChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParentChunkGenerator.cs
index dfa047594d..1f2387a8f3 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParentChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParentChunkGenerator.cs
@@ -9,8 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
public static readonly IParentChunkGenerator Null = new NullParentChunkGenerator();
- public abstract void AcceptStart(ParserVisitor visitor, Block block);
- public abstract void AcceptEnd(ParserVisitor visitor, Block block);
+ public abstract void Accept(ParserVisitor visitor, Block block);
public virtual void GenerateStartParentChunk(Block target, ChunkGeneratorContext context)
{
@@ -46,12 +45,12 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
return "None";
}
- public void AcceptStart(ParserVisitor visitor, Block block)
- {
- }
-
- public void AcceptEnd(ParserVisitor visitor, Block block)
+ public void Accept(ParserVisitor visitor, Block block)
{
+ for (var i = 0; i < block.Children.Count; i++)
+ {
+ block.Children[i].Accept(visitor);
+ }
}
}
}
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParserVisitor.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParserVisitor.cs
index de5b5ac1e7..aa96f6bc3f 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParserVisitor.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/ParserVisitor.cs
@@ -5,31 +5,19 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
{
internal abstract class ParserVisitor
{
- public virtual void VisitBlock(Block block)
+ protected virtual void VisitDefault(Block block)
{
- VisitStartBlock(block);
-
for (var i = 0; i < block.Children.Count; i++)
{
block.Children[i].Accept(this);
}
-
- VisitEndBlock(block);
}
- public virtual void VisitStartBlock(Block block)
+ public virtual void VisitBlock(Block block)
{
if (block.ChunkGenerator != null)
{
- block.ChunkGenerator.AcceptStart(this, block);
- }
- }
-
- public virtual void VisitEndBlock(Block block)
- {
- if (block.ChunkGenerator != null)
- {
- block.ChunkGenerator.AcceptEnd(this, block);
+ block.ChunkGenerator.Accept(this, block);
}
}
@@ -41,28 +29,19 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
}
}
- public virtual void VisitStartDynamicAttributeBlock(DynamicAttributeBlockChunkGenerator chunkGenerator, Block block)
+ public virtual void VisitDynamicAttributeBlock(DynamicAttributeBlockChunkGenerator chunkGenerator, Block block)
{
+ VisitDefault(block);
}
- public virtual void VisitEndDynamicAttributeBlock(DynamicAttributeBlockChunkGenerator chunkGenerator, Block block)
+ public virtual void VisitExpressionBlock(ExpressionChunkGenerator chunkGenerator, Block block)
{
+ VisitDefault(block);
}
- public virtual void VisitStartExpressionBlock(ExpressionChunkGenerator chunkGenerator, Block block)
- {
- }
-
- public virtual void VisitEndExpressionBlock(ExpressionChunkGenerator chunkGenerator, Block block)
- {
- }
-
- public virtual void VisitStartAttributeBlock(AttributeBlockChunkGenerator chunkGenerator, Block block)
- {
- }
-
- public virtual void VisitEndAttributeBlock(AttributeBlockChunkGenerator chunkGenerator, Block block)
+ public virtual void VisitAttributeBlock(AttributeBlockChunkGenerator chunkGenerator, Block block)
{
+ VisitDefault(block);
}
public virtual void VisitExpressionSpan(ExpressionChunkGenerator chunkGenerator, Span span)
@@ -89,36 +68,24 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
{
}
- public virtual void VisitEndTemplateBlock(TemplateBlockChunkGenerator chunkGenerator, Block block)
+ public virtual void VisitDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
{
+ VisitDefault(block);
}
- public virtual void VisitStartDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
+ public virtual void VisitTemplateBlock(TemplateBlockChunkGenerator chunkGenerator, Block block)
{
+ VisitDefault(block);
}
- public virtual void VisitEndDirectiveBlock(DirectiveChunkGenerator chunkGenerator, Block block)
+ public virtual void VisitCommentBlock(RazorCommentChunkGenerator chunkGenerator, Block block)
{
+ VisitDefault(block);
}
- public virtual void VisitStartTemplateBlock(TemplateBlockChunkGenerator chunkGenerator, Block block)
- {
- }
-
- public virtual void VisitEndCommentBlock(RazorCommentChunkGenerator chunkGenerator, Block block)
- {
- }
-
- public virtual void VisitStartCommentBlock(RazorCommentChunkGenerator chunkGenerator, Block block)
- {
- }
-
- public virtual void VisitStartTagHelperBlock(TagHelperChunkGenerator chunkGenerator, Block block)
- {
- }
-
- public virtual void VisitEndTagHelperBlock(TagHelperChunkGenerator chunkGenerator, Block block)
+ public virtual void VisitTagHelperBlock(TagHelperChunkGenerator chunkGenerator, Block block)
{
+ VisitDefault(block);
}
public virtual void VisitAddTagHelperSpan(AddTagHelperChunkGenerator chunkGenerator, Span span)
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/RazorCommentChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/RazorCommentChunkGenerator.cs
index 73d32d1006..eb96550f48 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/RazorCommentChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/RazorCommentChunkGenerator.cs
@@ -5,14 +5,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
{
internal class RazorCommentChunkGenerator : ParentChunkGenerator
{
- public override void AcceptStart(ParserVisitor visitor, Block block)
+ public override void Accept(ParserVisitor visitor, Block block)
{
- visitor.VisitStartCommentBlock(this, block);
- }
-
- public override void AcceptEnd(ParserVisitor visitor, Block block)
- {
- visitor.VisitEndCommentBlock(this, block);
+ visitor.VisitCommentBlock(this, block);
}
}
}
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TagHelperChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TagHelperChunkGenerator.cs
index 39f19000e6..b9c42fb6fc 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TagHelperChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TagHelperChunkGenerator.cs
@@ -84,14 +84,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
//context.ChunkTreeBuilder.EndParentChunk();
}
- public override void AcceptStart(ParserVisitor visitor, Block block)
+ public override void Accept(ParserVisitor visitor, Block block)
{
- visitor.VisitStartTagHelperBlock(this, block);
- }
-
- public override void AcceptEnd(ParserVisitor visitor, Block block)
- {
- visitor.VisitEndTagHelperBlock(this, block);
+ visitor.VisitTagHelperBlock(this, block);
}
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TemplateBlockChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TemplateBlockChunkGenerator.cs
index 2358e35629..54cc3874ba 100644
--- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TemplateBlockChunkGenerator.cs
+++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/TemplateBlockChunkGenerator.cs
@@ -5,14 +5,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
{
internal class TemplateBlockChunkGenerator : ParentChunkGenerator
{
- public override void AcceptStart(ParserVisitor visitor, Block block)
+ public override void Accept(ParserVisitor visitor, Block block)
{
- visitor.VisitStartTemplateBlock(this, block);
- }
-
- public override void AcceptEnd(ParserVisitor visitor, Block block)
- {
- visitor.VisitEndTemplateBlock(this, block);
+ visitor.VisitTemplateBlock(this, block);
}
public override void GenerateStartParentChunk(Block target, ChunkGeneratorContext context)