Skip to content

Commit 407b197

Browse files
authored
Use IAssemblySymbol for tag helper discovery (#30560)
1 parent dfcaac5 commit 407b197

11 files changed

+45
-36
lines changed

src/Razor/Microsoft.AspNetCore.Mvc.Razor.Extensions/src/ViewComponentTagHelperDescriptorProvider.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,10 @@ public void Execute(TagHelperDescriptorProviderContext context)
3838
var types = new List<INamedTypeSymbol>();
3939
var visitor = new ViewComponentTypeVisitor(vcAttribute, nonVCAttribute, types);
4040

41-
var targetReference = context.Items.GetTargetMetadataReference();
42-
if (targetReference is not null)
41+
var targetAssembly = context.Items.GetTargetAssembly();
42+
if (targetAssembly is not null)
4343
{
44-
if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly && IsTagHelperAssembly(targetAssembly))
45-
{
46-
visitor.Visit(targetAssembly.GlobalNamespace);
47-
}
44+
visitor.Visit(targetAssembly.GlobalNamespace);
4845
}
4946
else
5047
{

src/Razor/Microsoft.CodeAnalysis.Razor/src/BindTagHelperDescriptorProvider.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ public void Execute(TagHelperDescriptorProviderContext context)
101101
return;
102102
}
103103

104+
var targetAssembly = context.Items.GetTargetAssembly();
105+
if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, bindMethods.ContainingAssembly))
106+
{
107+
return;
108+
}
109+
104110
// Tag Helper defintion for case #1. This is the most general case.
105111
context.Results.Add(CreateFallbackBindTagHelper());
106112

src/Razor/Microsoft.CodeAnalysis.Razor/src/ComponentTagHelperDescriptorProvider.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,10 @@ public void Execute(TagHelperDescriptorProviderContext context)
4040
var types = new List<INamedTypeSymbol>();
4141
var visitor = new ComponentTypeVisitor(symbols, types);
4242

43-
var targetReference = context.Items.GetTargetMetadataReference();
44-
if (targetReference is not null)
43+
var targetAssembly = context.Items.GetTargetAssembly();
44+
if (targetAssembly is not null)
4545
{
46-
if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly)
47-
{
48-
visitor.Visit(targetAssembly.GlobalNamespace);
49-
}
50-
46+
visitor.Visit(targetAssembly.GlobalNamespace);
5147
}
5248
else
5349
{

src/Razor/Microsoft.CodeAnalysis.Razor/src/DefaultTagHelperDescriptorProvider.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,10 @@ public void Execute(TagHelperDescriptorProviderContext context)
3535
var types = new List<INamedTypeSymbol>();
3636
var visitor = new TagHelperTypeVisitor(iTagHelper, types);
3737

38-
var targetReference = context.Items.GetTargetMetadataReference();
39-
if (targetReference is not null)
38+
var targetAssembly = context.Items.GetTargetAssembly();
39+
if (targetAssembly is not null)
4040
{
41-
if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly && IsTagHelperAssembly(targetAssembly))
42-
{
43-
visitor.Visit(targetAssembly.GlobalNamespace);
44-
}
41+
visitor.Visit(targetAssembly.GlobalNamespace);
4542
}
4643
else
4744
{

src/Razor/Microsoft.CodeAnalysis.Razor/src/EventHandlerTagHelperDescriptorProvider.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,10 @@ private List<EventHandlerData> GetEventHandlerData(TagHelperDescriptorProviderCo
4747
var types = new List<INamedTypeSymbol>();
4848
var visitor = new EventHandlerDataVisitor(types);
4949

50-
51-
var targetReference = context.Items.GetTargetMetadataReference();
52-
if (targetReference is not null)
50+
var targetAssembly = context.Items.GetTargetAssembly();
51+
if (targetAssembly is not null)
5352
{
54-
if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly)
55-
{
56-
visitor.Visit(targetAssembly.GlobalNamespace);
57-
}
58-
53+
visitor.Visit(targetAssembly.GlobalNamespace);
5954
}
6055
else
6156
{

src/Razor/Microsoft.CodeAnalysis.Razor/src/KeyTagHelperDescriptorProvider.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ public void Execute(TagHelperDescriptorProviderContext context)
3535
return;
3636
}
3737

38+
var targetAssembly = context.Items.GetTargetAssembly();
39+
if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, renderTreeBuilderType.ContainingAssembly))
40+
{
41+
return;
42+
}
43+
3844
context.Results.Add(CreateKeyTagHelper());
3945
}
4046

src/Razor/Microsoft.CodeAnalysis.Razor/src/RefTagHelperDescriptorProvider.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ public void Execute(TagHelperDescriptorProviderContext context)
3535
return;
3636
}
3737

38+
var targetAssembly = context.Items.GetTargetAssembly();
39+
if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, elementReference.ContainingAssembly))
40+
{
41+
return;
42+
}
43+
3844
context.Results.Add(CreateRefTagHelper());
3945
}
4046

src/Razor/Microsoft.CodeAnalysis.Razor/src/SplatTagHelperDescriptorProvider.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ public void Execute(TagHelperDescriptorProviderContext context)
3535
return;
3636
}
3737

38+
var targetAssembly = context.Items.GetTargetAssembly();
39+
if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, renderTreeBuilder.ContainingAssembly))
40+
{
41+
return;
42+
}
43+
3844
context.Results.Add(CreateSplatTagHelper());
3945
}
4046

src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetReferenceExtensions.cs renamed to src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetAssemblyExtensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@
77

88
namespace Microsoft.CodeAnalysis.Razor
99
{
10-
internal static class TagHelperTargetReferenceExtensions
10+
internal static class TagHelperTargetAssemblyExtensions
1111
{
1212
private static readonly object TargetAssemblyKey = new object();
1313

14-
public static MetadataReference? GetTargetMetadataReference(this ItemCollection items)
14+
public static IAssemblySymbol? GetTargetAssembly(this ItemCollection items)
1515
{
16-
if (items.Count == 0 || items[TargetAssemblyKey] is not MetadataReference reference)
16+
if (items.Count == 0 || items[TargetAssemblyKey] is not IAssemblySymbol symbol)
1717
{
1818
return null;
1919
}
2020

21-
return reference;
21+
return symbol;
2222
}
2323

24-
public static void SetTargetMetadataReference(this ItemCollection items, MetadataReference reference)
24+
public static void SetTargetAssembly(this ItemCollection items, IAssemblySymbol symbol)
2525
{
26-
items[TargetAssemblyKey] = reference;
26+
items[TargetAssemblyKey] = symbol;
2727
}
2828
}
2929
}

src/Razor/Microsoft.CodeAnalysis.Razor/test/ComponentTagHelperDescriptorProviderTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,7 @@ public Task SetParametersAsync(ParameterView parameters)
16171617

16181618
var context = TagHelperDescriptorProviderContext.Create();
16191619
context.SetCompilation(compilation);
1620-
context.Items.SetTargetMetadataReference(compilation.References.Single(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll")));
1620+
context.Items.SetTargetAssembly((IAssemblySymbol) compilation.GetAssemblyOrModuleSymbol(compilation.References.First(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll"))));
16211621
var provider = new ComponentTagHelperDescriptorProvider();
16221622

16231623
// Act

src/Razor/Microsoft.CodeAnalysis.Razor/test/DefaultTagHelperDescriptorProviderTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output) {
8585
}
8686

8787
[Fact]
88-
public void Execute_WithTargetMetadataReference_Works()
88+
public void Execute_WithTargetAssembly_Works()
8989
{
9090
// Arrange
9191
var testTagHelper = "TestAssembly.TestTagHelper";
@@ -104,7 +104,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output) {
104104

105105
var context = TagHelperDescriptorProviderContext.Create();
106106
context.SetCompilation(compilation);
107-
context.Items.SetTargetMetadataReference(compilation.References.First(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll")));
107+
context.Items.SetTargetAssembly((IAssemblySymbol) compilation.GetAssemblyOrModuleSymbol(compilation.References.First(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll"))));
108108

109109
// Act
110110
descriptorProvider.Execute(context);

0 commit comments

Comments
 (0)