Skip to content

Commit dffcf6e

Browse files
committed
Use GetMethod.Match
1 parent a9abc94 commit dffcf6e

3 files changed

Lines changed: 22 additions & 42 deletions

File tree

ReflectionAnalyzers/Helpers/Reflection/GetMethod.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,24 @@ when semanticModel.TryGetSymbol(identifierName, cancellationToken, out ILocalSym
5555
/// </summary>
5656
internal static GetMethod? Match(InvocationExpressionSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken)
5757
{
58-
if (candidate.TryGetTarget(KnownSymbol.Type.GetMethod, semanticModel, cancellationToken, out var target) &&
59-
Flags.TryCreate(candidate, target, semanticModel, cancellationToken, out var flags) &&
60-
ReflectedMember.TryGetType(candidate, semanticModel, cancellationToken, out var type, out var typeSource))
58+
if (candidate.TryGetTarget(KnownSymbol.Type.GetMethod, semanticModel, cancellationToken, out var target))
6159
{
62-
_ = Name.TryCreate(candidate, target, semanticModel, cancellationToken, out var name);
63-
_ = Types.TryCreate(candidate, target, semanticModel, cancellationToken, out var types);
64-
if (flags.AreInSufficient)
60+
if (ReflectedMember.TryGetType(candidate, semanticModel, cancellationToken, out var type, out var typeSource) &&
61+
Name.TryCreate(candidate, target, semanticModel, cancellationToken, out var name) &&
62+
Flags.TryCreate(candidate, target, semanticModel, cancellationToken, out var flags) &&
63+
Types.TryCreate(candidate, target, semanticModel, cancellationToken, out var types))
6564
{
66-
return new GetMethod(candidate, target, new ReflectedMember(type, typeSource, null, target, candidate, FilterMatch.InSufficientFlags), name, flags, types);
65+
return ReflectedMember.TryCreate(target, candidate, type, typeSource, name, flags.Effective, types, semanticModel.Compilation, out var member)
66+
? new GetMethod(candidate, target, member, name, flags, types)
67+
: null;
6768
}
6869

69-
if (ReflectedMember.TryCreate(target, candidate, type, typeSource, name, flags.Effective, types, semanticModel.Compilation, out var member))
70+
if (Flags.TryCreate(candidate, target, semanticModel, cancellationToken, out flags) &&
71+
flags.AreInSufficient)
7072
{
73+
_ = Name.TryCreate(candidate, target, semanticModel, cancellationToken, out name);
74+
_ = Types.TryCreate(candidate, target, semanticModel, cancellationToken, out types);
75+
var member = new ReflectedMember(type, typeSource, null, target, candidate, FilterMatch.InSufficientFlags);
7176
return new GetMethod(candidate, target, member, name, flags, types);
7277
}
7378
}

ReflectionAnalyzers/Helpers/Reflection/GetX.cs

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -89,39 +89,6 @@ internal static bool TryMatchGetField(InvocationExpressionSyntax invocation, Sem
8989
return TryMatchGetX(invocation, KnownSymbol.Type.GetField, semanticModel, cancellationToken, out member, out name, out flags);
9090
}
9191

92-
/// <summary>
93-
/// Check if <paramref name="invocation"/> is a call to Type.GetMethod.
94-
/// </summary>
95-
internal static bool TryMatchGetMethod(InvocationExpressionSyntax invocation, SemanticModel semanticModel, CancellationToken cancellationToken, out ReflectedMember member, out Name name, out Flags flags, out Types types)
96-
{
97-
if (invocation.TryGetTarget(KnownSymbol.Type.GetMethod, semanticModel, cancellationToken, out var getX))
98-
{
99-
if (ReflectedMember.TryGetType(invocation, semanticModel, cancellationToken, out var type, out var typeSource) &&
100-
IsKnownSignature(invocation, getX) &&
101-
Name.TryCreate(invocation, getX, semanticModel, cancellationToken, out name) &&
102-
Flags.TryCreate(invocation, getX, semanticModel, cancellationToken, out flags) &&
103-
Types.TryCreate(invocation, getX, semanticModel, cancellationToken, out types))
104-
{
105-
return ReflectedMember.TryCreate(getX, invocation, type, typeSource, name, flags.Effective, types, semanticModel.Compilation, out member);
106-
}
107-
108-
if (Flags.TryCreate(invocation, getX, semanticModel, cancellationToken, out flags) &&
109-
flags.AreInSufficient)
110-
{
111-
_ = Name.TryCreate(invocation, getX, semanticModel, cancellationToken, out name);
112-
_ = Types.TryCreate(invocation, getX, semanticModel, cancellationToken, out types);
113-
member = new ReflectedMember(type, typeSource, null, getX, invocation, FilterMatch.InSufficientFlags);
114-
return true;
115-
}
116-
}
117-
118-
member = default;
119-
flags = default;
120-
name = default;
121-
types = default;
122-
return false;
123-
}
124-
12592
/// <summary>
12693
/// Check if <paramref name="invocation"/> is a call to Type.GetNestedType.
12794
/// </summary>

ReflectionAnalyzers/NodeAnalzers/GetXAnalyzer.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,10 +256,18 @@ private static bool TryGetX(SyntaxNodeAnalysisContext context, out ReflectedMemb
256256
name = default;
257257
if (context.Node is InvocationExpressionSyntax candidate)
258258
{
259+
if (GetMethod.Match(candidate, context.SemanticModel, context.CancellationToken) is { } getMethod)
260+
{
261+
member = getMethod.Member;
262+
name = getMethod.Name;
263+
flags = getMethod.Flags;
264+
types = getMethod.Types;
265+
return true;
266+
}
267+
259268
return GetX.TryMatchGetConstructor(candidate, context.SemanticModel, context.CancellationToken, out member, out flags, out types) ||
260269
GetX.TryMatchGetEvent(candidate, context.SemanticModel, context.CancellationToken, out member, out name, out flags) ||
261270
GetX.TryMatchGetField(candidate, context.SemanticModel, context.CancellationToken, out member, out name, out flags) ||
262-
GetX.TryMatchGetMethod(candidate, context.SemanticModel, context.CancellationToken, out member, out name, out flags, out types) ||
263271
GetX.TryMatchGetNestedType(candidate, context.SemanticModel, context.CancellationToken, out member, out name, out flags) ||
264272
GetX.TryMatchGetProperty(candidate, context.SemanticModel, context.CancellationToken, out member, out name, out flags, out types);
265273
}

0 commit comments

Comments
 (0)