PsiStatement (int offset, @NotNull PsiExpression operand) { PsiElement elementAt = operand.getContainingFile().findElementAt(offset); PsiBlockStatement blockStatement = PsiTreeUtil.getParentOfType(elementAt, PsiBlockStatement.class); if (blockStatement == null) { final PsiIfStatement ifStm = PsiTreeUtil.getParentOfType(elementAt, PsiIfStatement.class); if (ifStm != null) { final PsiStatement thenBranch = ifStm.getThenBranch(); if (thenBranch instanceof PsiBlockStatement) { blockStatement = (PsiBlockStatement)thenBranch; } } else { final PsiWhileStatement whileStatement = PsiTreeUtil.getParentOfType(elementAt, PsiWhileStatement.class); if (whileStatement != null) { final PsiStatement body = whileStatement.getBody(); if (body instanceof PsiBlockStatement) { blockStatement = (PsiBlockStatement)body; } } } } if (blockStatement != null) { final PsiStatement[] statements = blockStatement.getCodeBlock().getStatements(); if (statements.length == 1 && statements[0] instanceof PsiExpressionStatement && PsiEquivalenceUtil.areElementsEquivalent(((PsiExpressionStatement)statements[0]).getExpression(), operand)) { return statements[0]; } } return null; }