Skip to content

Commit 5f61ad4

Browse files
committed
Fix tests.
1 parent 97c05d3 commit 5f61ad4

File tree

6 files changed

+42
-25
lines changed

6 files changed

+42
-25
lines changed

ReflectionAnalyzers.Tests/REFL003MemberDoesNotExistTests/Diagnostics.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class Foo
133133
{
134134
public Foo()
135135
{
136-
var member = typeof(CustomAggregateException).GetField(""MISSING"", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Instance | BindingFlags.DeclaredOnly);
136+
var member = typeof(CustomAggregateException).GetField(""MISSING"", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
137137
}
138138
}
139139
}";

ReflectionAnalyzers.Tests/REFL003MemberDoesNotExistTests/ValidCode.GetMethod.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ internal partial class ValidCode
88
internal class GetMethod
99
{
1010
[TestCase("typeof(Foo).GetMethod(nameof(PublicStatic))")]
11-
[TestCase("typeof(Foo).GetMethod(nameof(ReferenceEquals))")]
12-
[TestCase("typeof(Foo).GetMethod(nameof(ReferenceEquals), BindingFlags.Public | BindingFlags.Static)")]
11+
[TestCase("typeof(Foo).GetMethod(nameof(ReferenceEquals), BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)")]
1312
[TestCase("typeof(Foo).GetMethod(nameof(this.PublicInstance))")]
1413
[TestCase("typeof(Foo).GetMethod(nameof(PublicInstance))")]
1514
[TestCase("typeof(Foo).GetMethod(nameof(this.ToString))")]

ReflectionAnalyzers.Tests/REFL003MemberDoesNotExistTests/ValidCode.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ public Foo()
3232
}
3333

3434
[TestCase("GetMethod(\"get_InnerExceptionCount\", BindingFlags.NonPublic | BindingFlags.Instance)")]
35-
[TestCase("GetMethod(\"get_InnerExceptionCount\", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
3635
public void SubclassAggregateExceptionGetInnerExceptionCount(string call)
3736
{
3837
var exception = @"

ReflectionAnalyzers.Tests/REFL005WrongBindingFlagsTests/CodeFix.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ public Foo()
145145
private int Private() => 0;
146146
}
147147
}".AssertReplace("nameof(this.Public)", $"nameof({method})");
148+
148149
var fixedCode = @"
149150
namespace RoslynSandbox
150151
{
@@ -167,6 +168,7 @@ public Foo()
167168
}
168169
}".AssertReplace("nameof(this.Public)", $"nameof({method})")
169170
.AssertReplace("BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly", expected);
171+
170172
var message = $"There is no member matching the filter. Expected: {expected}.";
171173
AnalyzerAssert.CodeFix(Analyzer, Fix, ExpectedDiagnostic.WithMessage(message), code, fixedCode);
172174
}

ReflectionAnalyzers.Tests/REFL005WrongBindingFlagsTests/Diagnostics.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ internal class Diagnostics
99
private static readonly DiagnosticAnalyzer Analyzer = new GetXAnalyzer();
1010
private static readonly ExpectedDiagnostic ExpectedDiagnostic = ExpectedDiagnostic.Create(REFL005WrongBindingFlags.Descriptor);
1111

12+
[Explicit("Temp")]
1213
[TestCase("GetConstructor(↓Type.EmptyTypes)")]
1314
[TestCase("GetConstructor(↓Array.Empty<Type>())")]
1415
[TestCase("GetConstructor(↓new Type[0])")]

ReflectionAnalyzers/Helpers/GetX.cs

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -143,38 +143,38 @@ internal static bool TryGetTargetType(InvocationExpressionSyntax getX, SyntaxNod
143143
TryGetTargetType(memberAccess.Expression, context, null, out result, out instance);
144144
}
145145

146-
internal static GetXResult TryGetTarget(IMethodSymbol getX, ITypeSymbol targetType, string targetMetadataName, BindingFlags effectiveFlags, IReadOnlyList<ITypeSymbol> types, SyntaxNodeAnalysisContext context, out ISymbol target)
146+
internal static GetXResult TryGetTarget(IMethodSymbol getX, ITypeSymbol targetType, string targetMetadataName, BindingFlags flags, IReadOnlyList<ITypeSymbol> types, SyntaxNodeAnalysisContext context, out ISymbol target)
147147
{
148148
var name = TrimName();
149149
target = null;
150150
if (targetType is ITypeParameterSymbol typeParameter)
151151
{
152152
if (typeParameter.ConstraintTypes.Length == 0)
153153
{
154-
return TryGetTarget(getX, context.Compilation.GetSpecialType(SpecialType.System_Object), name, effectiveFlags, types, context, out target);
154+
return TryGetTarget(getX, context.Compilation.GetSpecialType(SpecialType.System_Object), name, flags, types, context, out target);
155155
}
156156

157157
foreach (var constraintType in typeParameter.ConstraintTypes)
158158
{
159-
var result = TryGetTarget(getX, constraintType, name, effectiveFlags, types, context, out target);
159+
var result = TryGetTarget(getX, constraintType, name, flags, types, context, out target);
160160
if (result != GetXResult.NoMatch)
161161
{
162162
return result;
163163
}
164164
}
165165

166-
return TryGetTarget(getX, context.Compilation.GetSpecialType(SpecialType.System_Object), name, effectiveFlags, types, context, out target);
166+
return TryGetTarget(getX, context.Compilation.GetSpecialType(SpecialType.System_Object), name, flags, types, context, out target);
167167
}
168168

169169
if (getX == KnownSymbol.Type.GetNestedType ||
170-
effectiveFlags.HasFlagFast(BindingFlags.DeclaredOnly) ||
171-
(effectiveFlags.HasFlagFast(BindingFlags.Static) &&
172-
!effectiveFlags.HasFlagFast(BindingFlags.Instance) &&
173-
!effectiveFlags.HasFlagFast(BindingFlags.FlattenHierarchy)))
170+
flags.HasFlagFast(BindingFlags.DeclaredOnly) ||
171+
(flags.HasFlagFast(BindingFlags.Static) &&
172+
!flags.HasFlagFast(BindingFlags.Instance) &&
173+
!flags.HasFlagFast(BindingFlags.FlattenHierarchy)))
174174
{
175175
foreach (var member in targetType.GetMembers(name))
176176
{
177-
if (!MatchesFilter(member, targetMetadataName, effectiveFlags, types))
177+
if (!MatchesFilter(member, targetMetadataName, flags, types))
178178
{
179179
continue;
180180
}
@@ -209,15 +209,27 @@ internal static GetXResult TryGetTarget(IMethodSymbol getX, ITypeSymbol targetTy
209209
return GetXResult.UseContainingType;
210210
}
211211

212-
return GetXResult.WrongFlags;
212+
if (target.MetadataName == targetMetadataName &&
213+
!MatchesFilter(target, target.MetadataName, flags, null))
214+
{
215+
return GetXResult.WrongFlags;
216+
}
217+
218+
if (!target.ContainingType.Equals(targetType) &&
219+
(target.IsStatic ||
220+
flags.HasFlagFast(BindingFlags.DeclaredOnly)))
221+
{
222+
return GetXResult.WrongFlags;
223+
}
213224
}
214225

215226
if (IsExplicitImplementation(out target))
216227
{
217228
return GetXResult.ExplicitImplementation;
218229
}
219230

220-
if (!HasVisibleMembers(targetType, effectiveFlags))
231+
if (flags.HasFlagFast(BindingFlags.NonPublic) &&
232+
!targetType.Locations.Any(x => x.IsInSource))
221233
{
222234
return GetXResult.Unknown;
223235
}
@@ -230,14 +242,7 @@ internal static GetXResult TryGetTarget(IMethodSymbol getX, ITypeSymbol targetTy
230242
{
231243
foreach (var member in current.GetMembers(name))
232244
{
233-
if (!MatchesFilter(member, targetMetadataName, effectiveFlags, types))
234-
{
235-
continue;
236-
}
237-
238-
if (member.IsStatic &&
239-
!current.Equals(targetType) &&
240-
!effectiveFlags.HasFlagFast(BindingFlags.FlattenHierarchy))
245+
if (!MatchesFilter(member, targetMetadataName, flags, types))
241246
{
242247
continue;
243248
}
@@ -252,6 +257,13 @@ internal static GetXResult TryGetTarget(IMethodSymbol getX, ITypeSymbol targetTy
252257
return GetXResult.UseContainingType;
253258
}
254259

260+
if (member.IsStatic &&
261+
!current.Equals(targetType) &&
262+
!flags.HasFlagFast(BindingFlags.FlattenHierarchy))
263+
{
264+
return GetXResult.WrongFlags;
265+
}
266+
255267
if (IsOfWrongType(member))
256268
{
257269
return GetXResult.WrongMemberType;
@@ -274,15 +286,19 @@ internal static GetXResult TryGetTarget(IMethodSymbol getX, ITypeSymbol targetTy
274286
{
275287
if (targetType.TryFindFirstMemberRecursive(name, out target))
276288
{
277-
return GetXResult.WrongFlags;
289+
if (target.MetadataName == targetMetadataName &&
290+
!MatchesFilter(target, target.MetadataName, flags, null))
291+
{
292+
return GetXResult.WrongFlags;
293+
}
278294
}
279295

280296
if (IsExplicitImplementation(out target))
281297
{
282298
return GetXResult.ExplicitImplementation;
283299
}
284300

285-
if (!HasVisibleMembers(targetType, effectiveFlags))
301+
if (!HasVisibleMembers(targetType, flags))
286302
{
287303
return GetXResult.Unknown;
288304
}

0 commit comments

Comments
 (0)