Skip to content

Commit 57860c2

Browse files
committed
Fix super set for VSTHRD103
1 parent 56c02ec commit 57860c2

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
@@ -163,7 +163,12 @@ internal static void AnalyzeInvocation(SyntaxNodeAnalysisContext context)
163163
/// </returns>
164164
private static bool HasSupersetOfParameterTypes(IMethodSymbol candidateMethod, IMethodSymbol baselineMethod)
165165
{
166-
return candidateMethod.Parameters.All(candidateParameter => baselineMethod.Parameters.Any(baselineParameter => baselineParameter.Type?.Equals(candidateParameter.Type, SymbolEqualityComparer.Default) ?? false));
166+
if (baselineMethod.Parameters.Length > candidateMethod.Parameters.Length)
167+
{
168+
return false;
169+
}
170+
171+
return baselineMethod.Parameters.All(baselineParameter => candidateMethod.Parameters.Any(candidateParameter => baselineParameter.Type?.Equals(candidateParameter.Type, SymbolEqualityComparer.Default) ?? false));
167172
}
168173

169174
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
@@ -1339,6 +1339,30 @@ void Bar() {}
13391339
await CSVerify.VerifyAnalyzerAsync(test);
13401340
}
13411341

1342+
[Fact]
1343+
public async Task DoNotRaiseForDistinctSyncMethod()
1344+
{
1345+
string test = @"
1346+
using System.Threading.Tasks;
1347+
1348+
class SomeClass {
1349+
Task Method(){
1350+
Bar(10, 11);
1351+
return Task.CompletedTask;
1352+
}
1353+
1354+
Task<int> Foo() => Task.FromResult(11);
1355+
async Task<int> BarAsync(int id) {
1356+
var number = await Foo();
1357+
return Bar(id, number);
1358+
}
1359+
int Bar(int id, int number) => id * number;
1360+
}
1361+
";
1362+
1363+
await CSVerify.VerifyAnalyzerAsync(test);
1364+
}
1365+
13421366
private DiagnosticResult CreateDiagnostic(int line, int column, int length, string methodName)
13431367
=> CSVerify.Diagnostic(DescriptorNoAlternativeMethod).WithSpan(line, column, line, column + length).WithArguments(methodName);
13441368

0 commit comments

Comments
 (0)