Skip to content

Commit 2d79265

Browse files
committed
Move to file
1 parent f952c7b commit 2d79265

2 files changed

Lines changed: 66 additions & 60 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
namespace ReflectionAnalyzers;
2+
3+
using System.Threading;
4+
using Gu.Roslyn.AnalyzerExtensions;
5+
using Microsoft.CodeAnalysis;
6+
using Microsoft.CodeAnalysis.CSharp.Syntax;
7+
8+
internal readonly struct GetEvent
9+
{
10+
internal readonly InvocationExpressionSyntax Invocation;
11+
internal readonly IMethodSymbol Target;
12+
internal readonly ReflectedMember Member;
13+
internal readonly Name Name;
14+
internal readonly Flags Flags;
15+
16+
private GetEvent(InvocationExpressionSyntax invocation, IMethodSymbol target, ReflectedMember member, Name name, Flags flags)
17+
{
18+
this.Invocation = invocation;
19+
this.Target = target;
20+
this.Member = member;
21+
this.Name = name;
22+
this.Flags = flags;
23+
}
24+
25+
internal IEventSymbol? Single => this.Member.Match == FilterMatch.Single ? (IEventSymbol)this.Member.Symbol! : null;
26+
27+
/// <summary>
28+
/// Check if <paramref name="candidate"/> is a call to Type.GetEvent.
29+
/// </summary>
30+
internal static GetEvent? Match(ExpressionSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken)
31+
{
32+
if (GetX.FindInvocation(candidate, semanticModel, cancellationToken) is { } invocation)
33+
{
34+
return Match(invocation, semanticModel, cancellationToken);
35+
}
36+
37+
return null;
38+
}
39+
40+
/// <summary>
41+
/// Check if <paramref name="candidate"/> is a call to Type.GetEvent.
42+
/// </summary>
43+
internal static GetEvent? Match(InvocationExpressionSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken)
44+
{
45+
if (candidate.TryGetTarget(KnownSymbol.Type.GetField, semanticModel, cancellationToken, out var target))
46+
{
47+
if (ReflectedMember.TryGetType(candidate, semanticModel, cancellationToken, out var type, out var typeSource) &&
48+
Name.TryCreate(candidate, target, semanticModel, cancellationToken, out var name) &&
49+
Flags.TryCreate(candidate, target, semanticModel, cancellationToken, out var flags) &&
50+
ReflectedMember.TryCreate(target, candidate, type, typeSource, name, flags.Effective, Types.Any, semanticModel.Compilation, out var member))
51+
{
52+
return new GetEvent(candidate, target, member, name, flags);
53+
}
54+
55+
if (Flags.TryCreate(candidate, target, semanticModel, cancellationToken, out flags) &&
56+
flags.AreInSufficient)
57+
{
58+
_ = Name.TryCreate(candidate, target, semanticModel, cancellationToken, out name);
59+
member = new ReflectedMember(type, typeSource, null, target, candidate, FilterMatch.InSufficientFlags);
60+
return new GetEvent(candidate, target, member, name, flags);
61+
}
62+
}
63+
64+
return null;
65+
}
66+
}

ReflectionAnalyzers/Helpers/Reflection/GetField.cs

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -64,63 +64,3 @@ private GetField(InvocationExpressionSyntax invocation, IMethodSymbol target, Re
6464
return null;
6565
}
6666
}
67-
68-
internal readonly struct GetEvent
69-
{
70-
internal readonly InvocationExpressionSyntax Invocation;
71-
internal readonly IMethodSymbol Target;
72-
internal readonly ReflectedMember Member;
73-
internal readonly Name Name;
74-
internal readonly Flags Flags;
75-
76-
private GetEvent(InvocationExpressionSyntax invocation, IMethodSymbol target, ReflectedMember member, Name name, Flags flags)
77-
{
78-
this.Invocation = invocation;
79-
this.Target = target;
80-
this.Member = member;
81-
this.Name = name;
82-
this.Flags = flags;
83-
}
84-
85-
internal IEventSymbol? Single => this.Member.Match == FilterMatch.Single ? (IEventSymbol)this.Member.Symbol! : null;
86-
87-
/// <summary>
88-
/// Check if <paramref name="candidate"/> is a call to Type.GetField.
89-
/// </summary>
90-
internal static GetEvent? Match(ExpressionSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken)
91-
{
92-
if (GetX.FindInvocation(candidate, semanticModel, cancellationToken) is { } invocation)
93-
{
94-
return Match(invocation, semanticModel, cancellationToken);
95-
}
96-
97-
return null;
98-
}
99-
100-
/// <summary>
101-
/// Check if <paramref name="candidate"/> is a call to Type.GetField.
102-
/// </summary>
103-
internal static GetEvent? Match(InvocationExpressionSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken)
104-
{
105-
if (candidate.TryGetTarget(KnownSymbol.Type.GetField, semanticModel, cancellationToken, out var target))
106-
{
107-
if (ReflectedMember.TryGetType(candidate, semanticModel, cancellationToken, out var type, out var typeSource) &&
108-
Name.TryCreate(candidate, target, semanticModel, cancellationToken, out var name) &&
109-
Flags.TryCreate(candidate, target, semanticModel, cancellationToken, out var flags) &&
110-
ReflectedMember.TryCreate(target, candidate, type, typeSource, name, flags.Effective, Types.Any, semanticModel.Compilation, out var member))
111-
{
112-
return new GetEvent(candidate, target, member, name, flags);
113-
}
114-
115-
if (Flags.TryCreate(candidate, target, semanticModel, cancellationToken, out flags) &&
116-
flags.AreInSufficient)
117-
{
118-
_ = Name.TryCreate(candidate, target, semanticModel, cancellationToken, out name);
119-
member = new ReflectedMember(type, typeSource, null, target, candidate, FilterMatch.InSufficientFlags);
120-
return new GetEvent(candidate, target, member, name, flags);
121-
}
122-
}
123-
124-
return null;
125-
}
126-
}

0 commit comments

Comments
 (0)