Skip to content

Commit c2d5e1e

Browse files
committed
Improve constant analysis for async analyzer
1 parent e802047 commit c2d5e1e

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

Tsarev.Analyzer.Web/AsyncControllerAnalyzer.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Collections.Immutable;
1+
using System.Collections.Immutable;
22
using Microsoft.CodeAnalysis;
33
using Microsoft.CodeAnalysis.Diagnostics;
44
using Microsoft.CodeAnalysis.CSharp;
@@ -106,21 +106,28 @@ private static bool IsWebTrivialExpression(ExpressionSyntax syntax)
106106
{
107107
return true;
108108
}
109+
110+
if (syntax is ConditionalExpressionSyntax conditionalExpressionSyntax)
111+
{
112+
return IsWebTrivialExpression(conditionalExpressionSyntax.Condition) &&
113+
IsWebTrivialExpression(conditionalExpressionSyntax.WhenFalse) &&
114+
IsWebTrivialExpression(conditionalExpressionSyntax.WhenTrue);
115+
}
109116
return syntax.IsConstant() || IsConstViewInvoke(syntax);
110117
}
111118

119+
private static readonly string[] ResultMethodNames = {"View", "PartialView", "File"};
120+
112121
private static bool IsConstViewInvoke(ExpressionSyntax syntax)
113122
{
114-
var invokeExpression = syntax as InvocationExpressionSyntax;
115-
116-
if (invokeExpression == null) return false;
123+
if (!(syntax is InvocationExpressionSyntax invokeExpression)) return false;
117124

118125
var methodName = (invokeExpression.Expression as SimpleNameSyntax)?.Identifier.Text;
119-
var isViewCall = methodName == "View" || methodName == "PartialView";
120126

121127
var arguments = invokeExpression.ArgumentList.Arguments;
122128

123-
return isViewCall && (arguments.All(argument => IsWebTrivialExpression(argument.Expression)));
129+
return ResultMethodNames.Contains(methodName) &&
130+
arguments.All(argument => IsWebTrivialExpression(argument.Expression));
124131
}
125132

126133

0 commit comments

Comments
 (0)