private IsKindExpressionInfo( ExpressionSyntax isKindExpression, ExpressionSyntax expression, ExpressionSyntax kindExpression, IsKindExpressionStyle style) { IsKindExpression = isKindExpression; Expression = expression; KindExpression = kindExpression; Style = style; }
private static IsKindExpressionInfo Create( BinaryExpressionSyntax binaryExpression, SyntaxKind binaryExpressionKind, ExpressionSyntax expression1, ExpressionSyntax expression2, SemanticModel semanticModel, CancellationToken cancellationToken) { switch (expression1) { case InvocationExpressionSyntax invocationExpression: { SimpleMemberInvocationExpressionInfo invocationInfo = SyntaxInfo.SimpleMemberInvocationExpressionInfo(invocationExpression); if (!invocationInfo.Success) break; if (!IsKindMethod(invocationInfo.Name, semanticModel, cancellationToken)) break; return new IsKindExpressionInfo(binaryExpression, invocationInfo.Expression, expression2, (binaryExpressionKind == SyntaxKind.EqualsExpression) ? IsKindExpressionStyle.Kind : IsKindExpressionStyle.NotKind); } case ConditionalAccessExpressionSyntax conditionalAccess: { if (conditionalAccess.WhenNotNull is not InvocationExpressionSyntax invocationExpression) break; if (invocationExpression.Expression is not MemberBindingExpressionSyntax memberBindingExpression) break; if (expression2.IsKind(SyntaxKind.TrueLiteralExpression)) { if (!IsIsKindMethod(memberBindingExpression.Name, semanticModel, cancellationToken)) break; IsKindExpressionStyle style = (binaryExpressionKind == SyntaxKind.EqualsExpression) ? IsKindExpressionStyle.IsKindConditional : IsKindExpressionStyle.NotIsKindConditional; return new IsKindExpressionInfo(binaryExpression, conditionalAccess.Expression, invocationExpression.ArgumentList.Arguments[0].Expression, style); } else { if (!IsKindMethod(memberBindingExpression.Name, semanticModel, cancellationToken)) break; IsKindExpressionStyle style = (binaryExpressionKind == SyntaxKind.EqualsExpression) ? IsKindExpressionStyle.KindConditional : IsKindExpressionStyle.NotKindConditional; return new IsKindExpressionInfo(binaryExpression, conditionalAccess.Expression, expression2, style); } } } return default; }
private static IsKindExpressionInfo Create( InvocationExpressionSyntax invocationExpression, SemanticModel semanticModel, IsKindExpressionStyle style, CancellationToken cancellationToken) { SimpleMemberInvocationExpressionInfo invocationInfo = SyntaxInfo.SimpleMemberInvocationExpressionInfo(invocationExpression); if (!invocationInfo.Success) return default; if (!IsIsKindMethod(invocationInfo.Name, semanticModel, cancellationToken)) return default; return new IsKindExpressionInfo(invocationExpression, invocationInfo.Expression, invocationInfo.Arguments[0].Expression, style); }