Set<PsiClass> (@NotNull PsiExpression expression, int maxDepth) { if (maxDepth == 0) return null; expression = PsiUtil.skipParenthesizedExprDown(expression); return expression instanceof PsiTypeCastExpression || expression instanceof PsiThisExpression ? extractClass(expression.getType()) : expression instanceof PsiMethodCallExpression ? getCallType(expression, maxDepth) : expression instanceof PsiReferenceExpression ? getNonCallType((PsiReferenceExpression)expression, maxDepth) : expression instanceof PsiNewExpression ? getNewType((PsiNewExpression)expression) : expression instanceof PsiConditionalExpression ? getConditionalType((PsiConditionalExpression)expression, maxDepth) : null; }