boolean (PsiStatement statement, Set<? super PsiVariable> variables) { if (statement instanceof PsiIfStatement ifStatement) { if (ifStatement.getElseBranch() != null) return false; final PsiExpression condition = ifStatement.getCondition(); if (!(condition instanceof PsiBinaryExpression binaryExpression)) return false; final IElementType tokenType = binaryExpression.getOperationTokenType(); if (!JavaTokenType.NE.equals(tokenType)) return false; final PsiExpression lhs = binaryExpression.getLOperand(); final PsiExpression rhs = binaryExpression.getROperand(); if (rhs == null) return false; final PsiElement variable; if (PsiTypes.nullType().equals(rhs.getType())) { variable = ExpressionUtils.resolveLocalVariable(lhs); } else if (PsiTypes.nullType().equals(lhs.getType())) { variable = ExpressionUtils.resolveLocalVariable(rhs); } else { return false; } if (variable == null) return false; final PsiStatement thenBranch = ifStatement.getThenBranch(); final PsiVariable resourceVariable; if (thenBranch instanceof PsiExpressionStatement) { resourceVariable = findAutoCloseableVariable(thenBranch); } else if (thenBranch instanceof PsiBlockStatement blockStatement) { final PsiCodeBlock codeBlock = blockStatement.getCodeBlock(); resourceVariable = findAutoCloseableVariable(ControlFlowUtils.getOnlyStatementInBlock(codeBlock)); } else { return false; } if (variable.equals(resourceVariable)) { variables.add(resourceVariable); return true; } } else if (statement instanceof PsiExpressionStatement expressionStatement) { final PsiExpression expression = expressionStatement.getExpression(); if (!(expression instanceof PsiMethodCallExpression methodCallExpression)) return false; final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); final String methodName = methodExpression.getReferenceName(); if (HardcodedMethodConstants.CLOSE.equals(methodName)) { final PsiExpression qualifier = methodExpression.getQualifierExpression(); if (!(qualifier instanceof PsiReferenceExpression referenceExpression)) return false; final PsiElement target = referenceExpression.resolve(); if (!(target instanceof PsiLocalVariable || target instanceof PsiParameter) || target instanceof PsiResourceVariable) return false; PsiVariable variable = (PsiVariable)target; if (!isAutoCloseable(variable)) return false; variables.add(variable); return true; } else { return false; } } return false; }