boolean (@NotNull GrCodeBlock body, @NotNull GrStatement statement) { GroovyPsiElement elementToCheck = statement; while (true) { if (elementToCheck == null) return false; final GroovyPsiElement container = PsiTreeUtil.getParentOfType(elementToCheck, GrStatement.class, GrCodeBlock.class, GrCaseSection.class); if (container == null) return false; if (isLoop(container)) return false; if (container instanceof GrCaseSection) { final GrSwitchStatement switchStatement = (GrSwitchStatement)container.getParent(); final GrCaseSection[] sections = switchStatement.getCaseSections(); if (container == sections[sections.length - 1]) return false; } if (container instanceof GrCodeBlock) { if (elementToCheck instanceof GrStatement) { final GrCodeBlock codeBlock = (GrCodeBlock)container; if (!statementIsLastInBlock(codeBlock, (GrStatement)elementToCheck)) { return false; } } if (container instanceof GrOpenBlock || container instanceof GrClosableBlock) { if (container.equals(body)) { return true; } elementToCheck = PsiTreeUtil.getParentOfType(container, GrStatement.class); } else { elementToCheck = container; } } else { elementToCheck = container; } } }