PsiType (@NotNull PsiReferenceParameterList referenceParameterList) { PsiNewExpression newExpression = PsiTreeUtil.getParentOfType(referenceParameterList, PsiNewExpression.class); LOG.assertTrue(newExpression != null); PsiElement parent = newExpression.getParent(); PsiType expectedType = null; if (parent instanceof PsiVariable && newExpression.equals(((PsiVariable)parent).getInitializer())) { expectedType = ((PsiVariable)parent).getType(); } else if (parent instanceof PsiAssignmentExpression && newExpression.equals(((PsiAssignmentExpression)parent).getRExpression())) { expectedType = ((PsiAssignmentExpression)parent).getLExpression().getType(); } else if (parent instanceof PsiReturnStatement) { PsiElement method = PsiTreeUtil.getParentOfType(parent, PsiMethod.class, PsiLambdaExpression.class); if (method instanceof PsiMethod) { expectedType = ((PsiMethod)method).getReturnType(); } } else if (parent instanceof PsiExpressionList) { PsiElement pParent = parent.getParent(); if (pParent instanceof PsiCallExpression) { PsiExpressionList argumentList = ((PsiCallExpression)pParent).getArgumentList(); if (parent.equals(argumentList)) { PsiMethod method = ((PsiCallExpression)pParent).resolveMethod(); if (method != null) { PsiExpression[] expressions = argumentList.getExpressions(); int idx = ArrayUtilRt.find(expressions, newExpression); if (idx > -1) { PsiParameter parameter = method.getParameterList().getParameter(idx); if (parameter != null) { expectedType = parameter.getType(); } } } } } } return expectedType; }