diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs index 11d9b24ce6..2d88177c10 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs @@ -642,12 +642,19 @@ namespace Microsoft.AspNetCore.Razor.Language tagName = tagName.Substring(_tagHelperPrefix.Length); } - _builder.Push(new TagHelperIRNode() + var tagHelperNode = new TagHelperIRNode() { TagName = tagName, TagMode = tagHelperBlock.TagMode, Source = BuildSourceSpanFromNode(block) - }); + }; + + foreach (var tagHelper in tagHelperBlock.Binding.Descriptors) + { + tagHelperNode.TagHelpers.Add(tagHelper); + } + + _builder.Push(tagHelperNode); _builder.Push(new TagHelperBodyIRNode()); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/TagHelperIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/TagHelperIRNode.cs index 18026165d9..db6abda2a1 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/TagHelperIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/TagHelperIRNode.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; namespace Microsoft.AspNetCore.Razor.Language.Intermediate { @@ -46,6 +47,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate public TagMode TagMode { get; set; } + public ICollection TagHelpers { get; } = new List(); + public override void Accept(RazorIRNodeVisitor visitor) { if (visitor == null) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorIRLoweringPhaseIntegrationTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorIRLoweringPhaseIntegrationTest.cs index 4c23cfd37a..05506ade0b 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorIRLoweringPhaseIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorIRLoweringPhaseIntegrationTest.cs @@ -202,6 +202,7 @@ namespace Microsoft.AspNetCore.Razor.Language n => TagHelper( "span", TagMode.StartTagAndEndTag, + tagHelpers, n, c => Assert.IsType(c), c => Assert.IsType(c), @@ -245,6 +246,7 @@ namespace Microsoft.AspNetCore.Razor.Language n => TagHelper( "span", // Note: this is span not cool:span TagMode.StartTagAndEndTag, + tagHelpers, n, c => Assert.IsType(c), c => Assert.IsType(c), @@ -290,6 +292,7 @@ namespace Microsoft.AspNetCore.Razor.Language c1 => TagHelper( "span", TagMode.StartTagAndEndTag, + tagHelpers, c1, c2 => Assert.IsType(c2), c2 => Assert.IsType(c2), @@ -338,6 +341,7 @@ namespace Microsoft.AspNetCore.Razor.Language n => TagHelper( "input", TagMode.SelfClosing, + tagHelpers, n, c => Assert.IsType(c), c => Assert.IsType(c), diff --git a/test/Microsoft.AspNetCore.Razor.Test.Common/Langauge/Intermediate/RazorIRAssert.cs b/test/Microsoft.AspNetCore.Razor.Test.Common/Langauge/Intermediate/RazorIRAssert.cs index 4cbc377b36..cbc9eb2178 100644 --- a/test/Microsoft.AspNetCore.Razor.Test.Common/Langauge/Intermediate/RazorIRAssert.cs +++ b/test/Microsoft.AspNetCore.Razor.Test.Common/Langauge/Intermediate/RazorIRAssert.cs @@ -342,7 +342,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate } } - internal static void TagHelper(string tagName, TagMode tagMode, RazorIRNode node, params Action[] childValidators) + internal static void TagHelper(string tagName, TagMode tagMode, IEnumerable tagHelpers, RazorIRNode node, params Action[] childValidators) { var tagHelperNode = Assert.IsType(node); @@ -350,6 +350,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { Assert.Equal(tagName, tagHelperNode.TagName); Assert.Equal(tagMode, tagHelperNode.TagMode); + + Assert.Equal(tagHelpers, tagHelperNode.TagHelpers); } catch (XunitException e) {