PsiExpression (@NotNull PsiExpression expression) { PsiExpression context = expression; while (true) { PsiElement parent = context.getParent(); if (parent instanceof PsiParenthesizedExpression || parent instanceof PsiTypeCastExpression || (parent instanceof PsiConditionalExpression && ((PsiConditionalExpression)parent).getCondition() != context)) { if (TypeConversionUtil.isPrimitiveAndNotNull(((PsiExpression)parent).getType())) { return context; } context = (PsiExpression)parent; continue; } if (parent instanceof PsiExpressionStatement) { PsiElement grandParent = parent.getParent(); if (grandParent instanceof PsiSwitchLabeledRuleStatement) { PsiSwitchBlock block = ((PsiSwitchLabeledRuleStatement)grandParent).getEnclosingSwitchBlock(); if (block instanceof PsiSwitchExpression) { context = (PsiExpression)block; continue; } } } if (parent instanceof PsiYieldStatement) { PsiSwitchExpression enclosing = ((PsiYieldStatement)parent).findEnclosingExpression(); if (enclosing != null) { context = enclosing; continue; } } return context; } }