Skip to content

Commit 5aa6521

Browse files
authored
Fix analyzer RCS1077 (#1463)
1 parent 69b5962 commit 5aa6521

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
- Fix analyzer [RCS1246](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1246) ([PR](https://github.com/dotnet/roslynator/pull/1460))
1313
- Fix analyzer [RCS1085](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1085) ([PR](https://github.com/dotnet/roslynator/pull/1461))
14+
- Fix analyzer [RCS1077](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1077) ([PR](https://github.com/dotnet/roslynator/pull/1463))
1415

1516
## [4.12.2] - 2024-04-23
1617

src/Analyzers/CSharp/Analysis/OptimizeLinqMethodCallAnalysis.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ public static void AnalyzeFirstOrDefault(SyntaxNodeAnalysisContext context, in S
232232
if (parameterCount == 2)
233233
{
234234
if (parameters[0].Type.OriginalDefinition.IsIEnumerableOfT()
235-
&& SymbolUtility.IsPredicateFunc(parameters[1].Type, methodSymbol.TypeArguments[0]))
235+
&& SymbolUtility.IsPredicateFunc(parameters[1].Type, methodSymbol.TypeArguments[0])
236+
&& invocationInfo.Arguments[0].Expression is LambdaExpressionSyntax)
236237
{
237238
ITypeSymbol typeSymbol = context.SemanticModel.GetTypeSymbol(invocationInfo.Expression, context.CancellationToken);
238239

src/Tests/Analyzers.Tests/RCS1077OptimizeLinqMethodCallTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,6 +1503,28 @@ void M()
15031503
15041504
Func<string, IEnumerable<string>> M2() => null;
15051505
}
1506+
");
1507+
}
1508+
1509+
[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.OptimizeLinqMethodCall)]
1510+
public async Task TestNoDiagnostic_CannotConvertFuncToPredicate()
1511+
{
1512+
await VerifyNoDiagnosticAsync(@"
1513+
using System;
1514+
using System.Collections.Generic;
1515+
using System.Linq;
1516+
1517+
class C
1518+
{
1519+
void M()
1520+
{
1521+
var list = new List<string>();
1522+
1523+
Func<string, bool> predicate = null;
1524+
1525+
list.FirstOrDefault(predicate);
1526+
}
1527+
}
15061528
");
15071529
}
15081530
}

0 commit comments

Comments
 (0)