Skip to content

Commit 60d944a

Browse files
authored
Merge pull request #1545 from microsoft/dev/andarno/pr1423
Fix super set for VSTHRD103
2 parents 7418f36 + cd6a7fc commit 60d944a

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

src/Microsoft.VisualStudio.Threading.Analyzers.CSharp/VSTHRD103UseAsyncOptionAnalyzer.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,12 @@ internal void AnalyzeInvocation(SyntaxNodeAnalysisContext context)
182182
/// </returns>
183183
private static bool HasSupersetOfParameterTypes(IMethodSymbol candidateMethod, IMethodSymbol baselineMethod)
184184
{
185-
return candidateMethod.Parameters.All(candidateParameter => baselineMethod.Parameters.Any(baselineParameter => baselineParameter.Type?.Equals(candidateParameter.Type, SymbolEqualityComparer.Default) ?? false));
185+
if (baselineMethod.Parameters.Length > candidateMethod.Parameters.Length)
186+
{
187+
return false;
188+
}
189+
190+
return baselineMethod.Parameters.All(baselineParameter => candidateMethod.Parameters.Any(candidateParameter => baselineParameter.Type?.Equals(candidateParameter.Type, SymbolEqualityComparer.Default) ?? false));
186191
}
187192

188193
private static bool IsInTaskReturningMethodOrDelegate(SyntaxNodeAnalysisContext context)

test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD103UseAsyncOptionAnalyzerTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,6 +1386,30 @@ public static void NotExcludedMethod() { }
13861386
await CSVerify.VerifyAnalyzerAsync(test, CSVerify.Diagnostic(Descriptor).WithLocation(0).WithArguments("NotExcludedMethod", "NotExcludedMethodAsync"));
13871387
}
13881388

1389+
[Fact]
1390+
public async Task DoNotRaiseForDistinctSyncMethod()
1391+
{
1392+
string test = @"
1393+
using System.Threading.Tasks;
1394+
1395+
class SomeClass {
1396+
Task Method(){
1397+
Bar(10, 11);
1398+
return Task.CompletedTask;
1399+
}
1400+
1401+
Task<int> Foo() => Task.FromResult(11);
1402+
async Task<int> BarAsync(int id) {
1403+
var number = await Foo();
1404+
return Bar(id, number);
1405+
}
1406+
int Bar(int id, int number) => id * number;
1407+
}
1408+
";
1409+
1410+
await CSVerify.VerifyAnalyzerAsync(test);
1411+
}
1412+
13891413
private DiagnosticResult CreateDiagnostic(int line, int column, int length, string methodName)
13901414
=> CSVerify.Diagnostic(DescriptorNoAlternativeMethod).WithSpan(line, column, line, column + length).WithArguments(methodName);
13911415

0 commit comments

Comments
 (0)