boolean (GrStatement st) { final PsiElement parent = st.getParent(); if (parent instanceof GrOpenBlock) { if (st != ArrayUtil.getLastElement(((GrOpenBlock)parent).getStatements())) return false; PsiElement pparent = parent.getParent(); if (pparent instanceof GrMethod) { return true; } if (pparent instanceof GrBlockStatement || pparent instanceof GrCatchClause || pparent instanceof GrLabeledStatement) { pparent = pparent.getParent(); } if (pparent instanceof GrControlStatement || pparent instanceof GrTryCatchStatement) { return isCertainlyReturnStatement((GrStatement)pparent); } } else if (parent instanceof GrClosableBlock || parent instanceof GrBlockLambdaBody) { return st == ArrayUtil.getLastElement(((GrCodeBlock)parent).getStatements()); } else if (parent instanceof GroovyFileBase) { return st == ArrayUtil.getLastElement(((GroovyFileBase)parent).getStatements()); } else if (parent instanceof GrForStatement || parent instanceof GrIfStatement && st != ((GrIfStatement)parent).getCondition() || parent instanceof GrSynchronizedStatement && st != ((GrSynchronizedStatement)parent).getMonitor() || parent instanceof GrWhileStatement && st != ((GrWhileStatement)parent).getCondition() || parent instanceof GrConditionalExpression && st != ((GrConditionalExpression)parent).getCondition() || parent instanceof GrElvisExpression) { return isCertainlyReturnStatement((GrStatement)parent); } else if (parent instanceof GrCaseSection) { final GrStatement[] statements = ((GrCaseSection)parent).getStatements(); final GrStatement last = ArrayUtil.getLastElement(statements); final GrSwitchElement switchElement = (GrSwitchElement)parent.getParent(); final GrStatement switchAsStatement = switchElement instanceof GrSwitchExpression ? (GrSwitchExpression)switchElement : (GrStatement)switchElement; if (last instanceof GrBreakStatement && statements.length > 1 && statements[statements.length - 2] == st) { return isCertainlyReturnStatement(switchAsStatement); } else if (st == last) { if (st instanceof GrBreakStatement || isLastStatementInCaseSection((GrCaseSection)parent, switchElement)) { return isCertainlyReturnStatement(switchAsStatement); } } } return false; }