Skip to content

Commit 0b8eb2e

Browse files
committed
Understand type filter.
1 parent 7062757 commit 0b8eb2e

File tree

7 files changed

+278
-102
lines changed

7 files changed

+278
-102
lines changed

ReflectionAnalyzers.Tests/REFL004AmbiguousMatchTests/ValidCode.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,41 @@ public Foo()
5252
}".AssertReplace("GetMethod(nameof(this.ToString), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)", call);
5353
AnalyzerAssert.Valid(Analyzer, ExpectedDiagnostic, code);
5454
}
55+
56+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null)")]
57+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { i.GetType() }, null)")]
58+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new Type[] { typeof(int) }, null)")]
59+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new Type[1] { typeof(int) }, null)")]
60+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null)")]
61+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new[] { i.GetType() }, null)")]
62+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new Type[] { typeof(int) }, null)")]
63+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new Type[1] { typeof(int) }, null)")]
64+
public void OverloadsFilteredByType(string call)
65+
{
66+
var code = @"
67+
namespace RoslynSandbox
68+
{
69+
using System;
70+
using System.Reflection;
71+
72+
class Foo
73+
{
74+
public Foo(int i)
75+
{
76+
var methodInfo = typeof(Foo).GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null);
77+
}
78+
79+
public static double Static(int value) => value;
80+
81+
public static double Static(double value) => value;
82+
83+
public int Instance(int value) => value;
84+
85+
public double Instance(double value) => value;
86+
}
87+
}".AssertReplace("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null)", call);
88+
89+
AnalyzerAssert.Valid(Analyzer, ExpectedDiagnostic, code);
90+
}
5591
}
5692
}

ReflectionAnalyzers.Tests/REFL005WrongBindingFlagsTests/ValidCode.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,42 @@ public Foo()
9696
AnalyzerAssert.Valid(Analyzer, ExpectedDiagnostic, code);
9797
}
9898

99+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null)")]
100+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { i.GetType() }, null)")]
101+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new Type[] { typeof(int) }, null)")]
102+
[TestCase("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new Type[1] { typeof(int) }, null)")]
103+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null)")]
104+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new[] { i.GetType() }, null)")]
105+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new Type[] { typeof(int) }, null)")]
106+
[TestCase("GetMethod(nameof(this.Instance), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new Type[1] { typeof(int) }, null)")]
107+
public void OverloadsFilteredByType(string call)
108+
{
109+
var code = @"
110+
namespace RoslynSandbox
111+
{
112+
using System;
113+
using System.Reflection;
114+
115+
class Foo
116+
{
117+
public Foo(int i)
118+
{
119+
var methodInfo = typeof(Foo).GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null);
120+
}
121+
122+
public static double Static(int value) => value;
123+
124+
public static double Static(double value) => value;
125+
126+
public int Instance(int value) => value;
127+
128+
public double Instance(double value) => value;
129+
}
130+
}".AssertReplace("GetMethod(nameof(Static), BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, null, new[] { typeof(int) }, null)", call);
131+
132+
AnalyzerAssert.Valid(Analyzer, ExpectedDiagnostic, code);
133+
}
134+
99135
[TestCase("GetMethod(\"Bar\")")]
100136
[TestCase("GetMethod(\"Bar\", BindingFlags.Public | BindingFlags.Instance)")]
101137
[TestCase("GetMethod(\"Bar\", BindingFlags.NonPublic | BindingFlags.Instance)")]

0 commit comments

Comments
 (0)