boolean (@NotNull PsiVariable variable, @Nullable PsiStatement statement, boolean incremented) { if (!(statement instanceof PsiExpressionStatement expressionStatement)) { return false; } PsiExpression expression = expressionStatement.getExpression(); expression = PsiUtil.skipParenthesizedExprDown(expression); if (expression instanceof PsiUnaryExpression unaryExpression) { final IElementType tokenType = unaryExpression.getOperationTokenType(); if (!tokenType.equals(incremented ? JavaTokenType.PLUSPLUS : JavaTokenType.MINUSMINUS)) { return false; } final PsiExpression operand = unaryExpression.getOperand(); return ExpressionUtils.isReferenceTo(operand, variable); } if (expression instanceof PsiAssignmentExpression assignmentExpression) { final IElementType tokenType = assignmentExpression.getOperationTokenType(); final PsiExpression lhs = assignmentExpression.getLExpression(); if (!ExpressionUtils.isReferenceTo(lhs, variable)) { return false; } PsiExpression rhs = assignmentExpression.getRExpression(); rhs = PsiUtil.skipParenthesizedExprDown(rhs); if (tokenType == JavaTokenType.EQ) { if (!(rhs instanceof PsiBinaryExpression binaryExpression)) { return false; } final IElementType binaryTokenType = binaryExpression.getOperationTokenType(); if (binaryTokenType != (incremented ? JavaTokenType.PLUS : JavaTokenType.MINUS)) { return false; } final PsiExpression lOperand = binaryExpression.getLOperand(); final PsiExpression rOperand = binaryExpression.getROperand(); if (ExpressionUtils.isOne(lOperand)) { return ExpressionUtils.isReferenceTo(rOperand, variable); } if (ExpressionUtils.isOne(rOperand)) { return ExpressionUtils.isReferenceTo(lOperand, variable); } } else if (tokenType == (incremented ? JavaTokenType.PLUSEQ : JavaTokenType.MINUSEQ)) { if (ExpressionUtils.isOne(rhs)) { return true; } } } return false; }