Skip to content

Commit e1ae217

Browse files
committed
More tests.
1 parent 5f61ad4 commit e1ae217

File tree

2 files changed

+37
-9
lines changed
  • ReflectionAnalyzers.Tests/REFL013MemberIsOfWrongTypeTests
  • ReflectionAnalyzers/Helpers

2 files changed

+37
-9
lines changed

ReflectionAnalyzers.Tests/REFL013MemberIsOfWrongTypeTests/Diagnostics.cs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,21 @@ internal class Diagnostics
99
private static readonly DiagnosticAnalyzer Analyzer = new GetXAnalyzer();
1010
private static readonly ExpectedDiagnostic ExpectedDiagnostic = ExpectedDiagnostic.Create(REFL013MemberIsOfWrongType.DiagnosticId);
1111

12-
[Test]
13-
public void GetMethodMatchingProperty()
12+
[TestCase("GetEvent(nameof(this.Bar))")]
13+
[TestCase("GetEvent(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
14+
[TestCase("GetField(nameof(this.Bar))")]
15+
[TestCase("GetField(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
16+
[TestCase("GetMethod(nameof(this.Bar))")]
17+
[TestCase("GetMethod(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
18+
[TestCase("GetNestedType(nameof(this.Bar))")]
19+
[TestCase("GetNestedType(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
20+
public void WhenMatchIsProperty(string call)
1421
{
1522
var code = @"
1623
namespace RoslynSandbox
1724
{
25+
using System.Reflection;
26+
1827
class Foo
1928
{
2029
public Foo()
@@ -24,17 +33,26 @@ public Foo()
2433
2534
public int Bar { get; }
2635
}
27-
}";
36+
}".AssertReplace("GetMethod(nameof(this.Bar))", call);
2837
var message = "The type RoslynSandbox.Foo has a member named Bar of type SourcePropertySymbol.";
2938
AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic.WithMessage(message), code);
3039
}
3140

32-
[Test]
33-
public void GetPropertyMatchingMethod()
41+
[TestCase("GetEvent(nameof(this.Bar))")]
42+
[TestCase("GetEvent(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
43+
[TestCase("GetField(nameof(this.Bar))")]
44+
[TestCase("GetField(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
45+
[TestCase("GetProperty(nameof(this.Bar))")]
46+
[TestCase("GetProperty(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
47+
[TestCase("GetNestedType(nameof(this.Bar))")]
48+
[TestCase("GetNestedType(nameof(this.Bar), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)")]
49+
public void GetPropertyMatchingMethod(string call)
3450
{
3551
var code = @"
3652
namespace RoslynSandbox
3753
{
54+
using System.Reflection;
55+
3856
class Foo
3957
{
4058
public Foo()
@@ -44,7 +62,7 @@ public Foo()
4462
4563
public int Bar() => 0;
4664
}
47-
}";
65+
}".AssertReplace("GetProperty(nameof(this.Bar))", call);
4866
var message = "The type RoslynSandbox.Foo has a member named Bar of type SourceMemberMethodSymbol.";
4967
AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic.WithMessage(message), code);
5068
}

ReflectionAnalyzers/Helpers/GetX.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,16 +172,20 @@ internal static GetXResult TryGetTarget(IMethodSymbol getX, ITypeSymbol targetTy
172172
!flags.HasFlagFast(BindingFlags.Instance) &&
173173
!flags.HasFlagFast(BindingFlags.FlattenHierarchy)))
174174
{
175-
foreach (var member in targetType.GetMembers(name))
175+
foreach (var candidate in targetType.GetMembers(name))
176176
{
177-
if (!MatchesFilter(member, targetMetadataName, flags, types))
177+
if (!MatchesFilter(candidate, targetMetadataName, flags, types))
178178
{
179179
continue;
180180
}
181181

182182
if (target == null)
183183
{
184-
target = member;
184+
target = candidate;
185+
if (IsOfWrongType(target))
186+
{
187+
return GetXResult.WrongMemberType;
188+
}
185189
}
186190
else
187191
{
@@ -334,6 +338,12 @@ bool IsOfWrongType(ISymbol member)
334338
return true;
335339
}
336340

341+
if (getX.ReturnType == KnownSymbol.Type &&
342+
!(member is ITypeSymbol))
343+
{
344+
return true;
345+
}
346+
337347
return false;
338348
}
339349

0 commit comments

Comments
 (0)