Skip to content

Commit 81bf579

Browse files
committed
Address feedback
1 parent 28ec242 commit 81bf579

File tree

6 files changed

+31
-36
lines changed

6 files changed

+31
-36
lines changed

src/libraries/Microsoft.Extensions.Configuration.Binder/gen/ConfigurationBindingGenerator.Parser.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using System.Diagnostics.CodeAnalysis;
88
using System.Linq;
99
using Microsoft.CodeAnalysis;
10-
using Microsoft.CodeAnalysis.Operations;
1110

1211
namespace Microsoft.Extensions.Configuration.Binder.SourceGeneration
1312
{
@@ -44,13 +43,9 @@ public Parser(SourceProductionContext context, KnownTypeSymbols typeSymbols, Imm
4443

4544
foreach (BinderInvocation invocation in _invocations)
4645
{
47-
if (invocation.CandidateOperation is not IInvocationOperation operation)
48-
{
49-
continue;
50-
}
51-
52-
Debug.Assert(operation.TargetMethod.IsExtensionMethod);
53-
INamedTypeSymbol? candidateBinderType = operation.TargetMethod.ContainingType;
46+
IMethodSymbol targetMethod = invocation.Operation.TargetMethod;
47+
INamedTypeSymbol? candidateBinderType = targetMethod.ContainingType;
48+
Debug.Assert(targetMethod.IsExtensionMethod);
5449

5550
if (SymbolEqualityComparer.Default.Equals(candidateBinderType, _typeSymbols.ConfigurationBinder))
5651
{

src/libraries/Microsoft.Extensions.Configuration.Binder/gen/ConfigurationBindingGenerator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
3131
? new CompilationData((CSharpCompilation)compilation)
3232
: null);
3333

34-
IncrementalValuesProvider<BinderInvocation> inputCalls = context.SyntaxProvider
34+
IncrementalValuesProvider<BinderInvocation?> inputCalls = context.SyntaxProvider
3535
.CreateSyntaxProvider(
3636
(node, _) => BinderInvocation.IsCandidateSyntaxNode(node),
37-
BinderInvocation.Create);
37+
BinderInvocation.Create)
38+
.Where(invocation => invocation is not null);
3839

3940
IncrementalValueProvider<(CompilationData?, ImmutableArray<BinderInvocation>)> inputData = compilationData.Combine(inputCalls.Collect());
4041

src/libraries/Microsoft.Extensions.Configuration.Binder/gen/Helpers/Parser/BinderInvocation.cs

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,17 @@
99

1010
namespace Microsoft.Extensions.Configuration.Binder.SourceGeneration
1111
{
12-
internal readonly record struct BinderInvocation
12+
internal sealed record BinderInvocation(IInvocationOperation Operation, Location Location)
1313
{
14-
public IInvocationOperation? CandidateOperation { get; private init; }
15-
public Location? Location { get; private init; }
16-
17-
public static BinderInvocation Create(GeneratorSyntaxContext context, CancellationToken cancellationToken)
14+
public static BinderInvocation? Create(GeneratorSyntaxContext context, CancellationToken cancellationToken)
1815
{
1916
Debug.Assert(IsCandidateSyntaxNode(context.Node));
20-
InvocationExpressionSyntax? invocationSyntax = (InvocationExpressionSyntax)context.Node;
21-
22-
if (context.SemanticModel.GetOperation(invocationSyntax, cancellationToken) is IInvocationOperation operation &&
23-
IsCandidateInvocationOperation(operation))
24-
{
25-
return new BinderInvocation()
26-
{
27-
CandidateOperation = operation,
28-
Location = invocationSyntax.GetLocation()
29-
};
30-
}
17+
InvocationExpressionSyntax invocationSyntax = (InvocationExpressionSyntax)context.Node;
3118

32-
return default;
19+
return context.SemanticModel.GetOperation(invocationSyntax, cancellationToken) is IInvocationOperation operation &&
20+
IsCandidateInvocationOperation(operation)
21+
? new BinderInvocation(operation, invocationSyntax.GetLocation())
22+
: null;
3323
}
3424

3525
public static bool IsCandidateSyntaxNode(SyntaxNode node)
@@ -54,19 +44,28 @@ private static bool IsCandidateInvocationOperation(IInvocationOperation operatio
5444
{
5545
IsExtensionMethod: true,
5646
Name: string methodName,
57-
ContainingType.Name: string containingTypeName,
47+
ContainingType: INamedTypeSymbol
48+
{
49+
Name: string containingTypeName,
50+
ContainingNamespace: INamespaceSymbol containingNamespace,
51+
}
5852
})
5953
{
6054
return false;
6155
}
6256

57+
string containingNamespaceName = containingNamespace.ToDisplayString();
58+
6359
return (containingTypeName) switch
6460
{
6561
"ConfigurationBinder" =>
62+
containingNamespaceName is "Microsoft.Extensions.Configuration" &&
6663
IsCandidateMethodName_ConfigurationBinder(methodName),
6764
"OptionsBuilderConfigurationExtensions" =>
65+
containingNamespaceName is "Microsoft.Extensions.DependencyInjection" &&
6866
IsCandidateMethodName_OptionsBuilderConfigurationExtensions(methodName),
6967
"OptionsConfigurationServiceCollectionExtensions" =>
68+
containingNamespaceName is "Microsoft.Extensions.DependencyInjection" &&
7069
IsValidMethodName_OptionsConfigurationServiceCollectionExtensions(methodName),
7170
_ => false,
7271
};

src/libraries/Microsoft.Extensions.Configuration.Binder/gen/Helpers/Parser/ConfigurationBinder.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ private sealed partial class Parser
1616
{
1717
private void RegisterMethodInvocation_ConfigurationBinder(BinderInvocation invocation)
1818
{
19-
switch (invocation.CandidateOperation.TargetMethod.Name)
19+
switch (invocation.Operation.TargetMethod.Name)
2020
{
2121
case nameof(MethodsToGen_ConfigurationBinder.Bind):
2222
{
@@ -40,7 +40,7 @@ private void RegisterMethodInvocation_ConfigurationBinder(BinderInvocation invoc
4040

4141
private void RegisterBindInvocation(BinderInvocation invocation)
4242
{
43-
IInvocationOperation operation = invocation.CandidateOperation!;
43+
IInvocationOperation operation = invocation.Operation!;
4444
ImmutableArray<IParameterSymbol> @params = operation.TargetMethod.Parameters;
4545
int paramCount = @params.Length;
4646

@@ -132,7 +132,7 @@ private void RegisterBindInvocation(BinderInvocation invocation)
132132

133133
private void RegisterGetInvocation(BinderInvocation invocation)
134134
{
135-
IInvocationOperation operation = invocation.CandidateOperation!;
135+
IInvocationOperation operation = invocation.Operation!;
136136
IMethodSymbol targetMethod = operation.TargetMethod;
137137
ImmutableArray<IParameterSymbol> @params = targetMethod.Parameters;
138138
int paramCount = @params.Length;
@@ -192,7 +192,7 @@ private void RegisterGetInvocation(BinderInvocation invocation)
192192

193193
private void RegisterGetValueInvocation(BinderInvocation invocation)
194194
{
195-
IInvocationOperation operation = invocation.CandidateOperation!;
195+
IInvocationOperation operation = invocation.Operation!;
196196
IMethodSymbol targetMethod = operation.TargetMethod;
197197
ImmutableArray<IParameterSymbol> @params = targetMethod.Parameters;
198198
int paramCount = @params.Length;

src/libraries/Microsoft.Extensions.Configuration.Binder/gen/Helpers/Parser/OptionsBuilderConfigurationExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ private sealed partial class Parser
1414
{
1515
private void RegisterMethodInvocation_OptionsBuilderExt(BinderInvocation invocation)
1616
{
17-
IMethodSymbol targetMethod = invocation.CandidateOperation.TargetMethod;
17+
IMethodSymbol targetMethod = invocation.Operation.TargetMethod;
1818
ImmutableArray<IParameterSymbol> @params = targetMethod.Parameters;
1919

2020
if (!targetMethod.IsGenericMethod ||
@@ -49,7 +49,7 @@ private void RegisterMethodInvocation_OptionsBuilderExt(BinderInvocation invocat
4949

5050
private void RegisterBindInvocation(BinderInvocation invocation, TypeSpec typeSpec)
5151
{
52-
IInvocationOperation operation = invocation.CandidateOperation!;
52+
IInvocationOperation operation = invocation.Operation!;
5353
IMethodSymbol targetMethod = operation.TargetMethod;
5454
ImmutableArray<IParameterSymbol> @params = targetMethod.Parameters;
5555
int paramCount = @params.Length;
@@ -79,7 +79,7 @@ private void RegisterBindInvocation(BinderInvocation invocation, TypeSpec typeSp
7979

8080
private void ParseBindConfigurationInvocation(BinderInvocation invocation, TypeSpec typeSpec)
8181
{
82-
IMethodSymbol targetMethod = invocation.CandidateOperation.TargetMethod;
82+
IMethodSymbol targetMethod = invocation.Operation.TargetMethod;
8383
ImmutableArray<IParameterSymbol> @params = targetMethod.Parameters;
8484

8585
int paramCount = @params.Length;

src/libraries/Microsoft.Extensions.Configuration.Binder/gen/Helpers/Parser/OptionsConfigurationServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ private sealed partial class Parser
1414
{
1515
private void RegisterMethodInvocation_ServiceCollectionExt(BinderInvocation invocation)
1616
{
17-
IInvocationOperation operation = invocation.CandidateOperation!;
17+
IInvocationOperation operation = invocation.Operation!;
1818
IMethodSymbol targetMethod = operation.TargetMethod;
1919
ImmutableArray<IParameterSymbol> @params = targetMethod.Parameters;
2020
int paramCount = @params.Length;

0 commit comments

Comments
 (0)