PsiStatement (PsiExpression... expressionOccurrences) { PsiElement parent = expressionOccurrences[0]; int minOffset = expressionOccurrences[0].getTextRange().getStartOffset(); for (int i = 1; i < expressionOccurrences.length; i++) { parent = PsiTreeUtil.findCommonParent(parent, expressionOccurrences[i]); LOG.assertTrue(parent != null); minOffset = Math.min(minOffset, expressionOccurrences[i].getTextRange().getStartOffset()); } PsiCodeBlock block = null; while (parent != null) { if (parent instanceof PsiCodeBlock) { block = (PsiCodeBlock)parent; break; } else if (parent instanceof PsiSwitchLabeledRuleStatement) { parent = ((PsiSwitchLabeledRuleStatement)parent).getEnclosingSwitchBlock(); } else { parent = parent.getParent(); } } if (block == null) return null; PsiStatement[] statements = block.getStatements(); for (int i = 1; i < statements.length; i++) { if (statements[i].getTextRange().getStartOffset() > minOffset) return statements[i-1]; } return statements[statements.length - 1]; }