private static bool ContainsBreakStatementThatBelongsToParentLoop(StatementSyntax statement) { if (ShouldCheckBreakStatement()) { foreach (SyntaxNode descendant in statement.DescendantNodes(statement.Span, f => !IsLoopOrNestedMethod(f.Kind()))) { if (descendant.IsKind(SyntaxKind.BreakStatement)) { return(true); } } } return(false); bool IsLoopOrNestedMethod(SyntaxKind kind) { return(kind.IsLoop() || kind.IsNestedMethod()); } bool ShouldCheckBreakStatement() { for (SyntaxNode node = statement.Parent; node != null; node = node.Parent) { if (node is MemberDeclarationSyntax) { break; } SyntaxKind kind = node.Kind(); if (kind.IsNestedMethod()) { break; } if (kind.IsLoop()) { return(true); } } return(false); } }