diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs
index b92fea9890..395dc97d11 100644
--- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs
+++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs
@@ -751,7 +751,6 @@ namespace Microsoft.AspNetCore.Razor.Language
var context = node.GetSpanContext();
if (context != null && context.ChunkGenerator == SpanChunkGenerator.Null)
{
- base.VisitMarkupTextLiteral(node);
return;
}
@@ -763,11 +762,48 @@ namespace Microsoft.AspNetCore.Razor.Language
token.Content.Length == 0)
{
// We don't want to create IR nodes for marker tokens.
- base.VisitMarkupTextLiteral(node);
return;
}
}
+ VisitHtmlContent(node);
+ }
+
+ public override void VisitMarkupStartTag(MarkupStartTagSyntax node)
+ {
+ if (node.IsMarkupTransition)
+ {
+ // No need to visit tags.
+ return;
+ }
+
+ foreach (var child in node.Children)
+ {
+ Visit(child);
+ }
+ }
+
+ public override void VisitMarkupEndTag(MarkupEndTagSyntax node)
+ {
+ if (node.IsMarkupTransition)
+ {
+ // No need to visit tags.
+ return;
+ }
+
+ foreach (var child in node.Children)
+ {
+ Visit(child);
+ }
+ }
+
+ private void VisitHtmlContent(SyntaxNode node)
+ {
+ if (node == null || (node is SyntaxToken token && token.IsMissing))
+ {
+ return;
+ }
+
var source = BuildSourceSpanFromNode(node);
var currentChildren = _builder.Current.Children;
if (currentChildren.Count > 0 && currentChildren[currentChildren.Count - 1] is HtmlContentIntermediateNode)
@@ -777,7 +813,6 @@ namespace Microsoft.AspNetCore.Razor.Language
if (existingHtmlContent.Source == null && source == null)
{
Combine(existingHtmlContent, node);
- base.VisitMarkupTextLiteral(node);
return;
}
@@ -787,7 +822,6 @@ namespace Microsoft.AspNetCore.Razor.Language
existingHtmlContent.Source.Value.AbsoluteIndex + existingHtmlContent.Source.Value.Length == source.Value.AbsoluteIndex)
{
Combine(existingHtmlContent, node);
- base.VisitMarkupTextLiteral(node);
return;
}
}
@@ -806,24 +840,6 @@ namespace Microsoft.AspNetCore.Razor.Language
});
_builder.Pop();
-
- base.VisitMarkupTextLiteral(node);
- }
-
- public override void VisitMarkupStartTag(MarkupStartTagSyntax node)
- {
- foreach (var child in node.Children)
- {
- Visit(child);
- }
- }
-
- public override void VisitMarkupEndTag(MarkupEndTagSyntax node)
- {
- foreach (var child in node.Children)
- {
- Visit(child);
- }
}
public override void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node)
@@ -1140,7 +1156,7 @@ namespace Microsoft.AspNetCore.Razor.Language
// just process the attributes.
//
// Visit the attributes
- foreach (var block in node.Children)
+ foreach (var block in node.Attributes)
{
if (block is MarkupAttributeBlockSyntax attribute)
{
diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs
index 1b916ea75e..626eac6d29 100644
--- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs
+++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs
@@ -216,7 +216,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Syntax
throw new ArgumentNullException(nameof(node));
}
- var tokens = node.DescendantNodes().Where(n => n.IsToken).Cast();
+ var tokens = node.DescendantNodesAndSelf().Where(n => n.IsToken).Cast();
var content = string.Concat(tokens.Select(t => t.Content));
return content;
}