boolean (@Nullable PsiVariable variable, PsiElement context) { if (variable == null) { return false; } PsiStatement statement = PsiTreeUtil.getParentOfType(context, PsiStatement.class); if (statement == null) { return false; } PsiStatement nextStatement = PsiTreeUtil.getNextSiblingOfType(statement, PsiStatement.class); if (insideTryAllowed) { PsiStatement parentStatement = PsiTreeUtil.getParentOfType(statement, PsiStatement.class); while (parentStatement != null && !(parentStatement instanceof PsiTryStatement)) { parentStatement = PsiTreeUtil.getParentOfType(parentStatement, PsiStatement.class); } if (parentStatement != null) { final PsiTryStatement tryStatement = (PsiTryStatement)parentStatement; if (isResourceClosedInFinally(tryStatement, variable)) { return true; } } } while (nextStatement != null && !isSignificant(nextStatement)) { nextStatement = PsiTreeUtil.getNextSiblingOfType(nextStatement, PsiStatement.class); } while (nextStatement == null) { statement = PsiTreeUtil.getParentOfType(statement, PsiStatement.class, true); if (statement == null) { return false; } final PsiElement parent = statement.getParent(); if (parent instanceof PsiIfStatement) { statement = (PsiStatement)parent; } nextStatement = PsiTreeUtil.getNextSiblingOfType(statement, PsiStatement.class); } if (!(nextStatement instanceof PsiTryStatement)) { // exception in next statement can prevent closing of the resource return isResourceClose(nextStatement, variable); } final PsiTryStatement tryStatement = (PsiTryStatement)nextStatement; if (isResourceClosedInFinally(tryStatement, variable)) { return true; } return isResourceClose(nextStatement, variable); }