private static BinaryExpressionSyntax GetCondition(BinaryExpressionSyntax parent) { BinaryExpressionSyntax binaryExpression = ExtractExpressionFromConditionRefactoring.GetCondition(parent, SyntaxKind.IfStatement); if (binaryExpression != null) { if (binaryExpression.IsKind(SyntaxKind.LogicalAndExpression) || binaryExpression.Parent.Parent?.IsKind(SyntaxKind.Block) == true) { return(binaryExpression); } } return(null); }
public static void ComputeRefactoring(RefactoringContext context, ExpressionSyntax expression) { if (context.Span.IsBetweenSpans(expression)) { SyntaxNode parent = expression.Parent; if (parent?.IsKind(SyntaxKind.LogicalAndExpression) == true) { BinaryExpressionSyntax binaryExpression = ExtractExpressionFromConditionRefactoring.GetCondition((BinaryExpressionSyntax)parent, SyntaxKind.WhileStatement); if (binaryExpression?.IsKind(SyntaxKind.LogicalAndExpression) == true) { context.RegisterRefactoring( $"Extract '{expression}'", cancellationToken => RefactorAsync(context.Document, binaryExpression, expression, cancellationToken)); } } } }