PsiType (PsiElement parent) { PsiType type = PsiTypesUtil.getExpectedTypeByParent(parent); if (type == null) { final PsiElement arg = PsiUtil.skipParenthesizedExprUp(parent); final PsiElement gParent = arg.getParent(); if (gParent instanceof PsiExpressionList) { int i = ArrayUtilRt.find(((PsiExpressionList)gParent).getExpressions(), arg); final PsiElement pParent = gParent.getParent(); if (pParent instanceof PsiCallExpression) { final PsiMethod method = ((PsiCallExpression)pParent).resolveMethod(); if (method != null) { final PsiParameter[] parameters = method.getParameterList().getParameters(); if (i >= parameters.length) { if (method.isVarArgs()) { return ((PsiEllipsisType)parameters[parameters.length - 1].getType()).getComponentType(); } } else { return parameters[i].getType(); } } } } } return type; }