PsiType (@NotNull JavaResolveResult result, int parameterPosition) { if (parameterPosition < 0 ) { return null; } final PsiMethod method = (PsiMethod)result.getElement(); if (method == null) { return null; } final PsiParameterList parameterList = method.getParameterList(); final PsiParameter[] parameters = parameterList.getParameters(); if (parameters.length == 0) { return null; } final boolean isVarargs = result instanceof MethodCandidateInfo && ((MethodCandidateInfo)result).getApplicabilityLevel() == MethodCandidateInfo.ApplicabilityLevel.VARARGS; final PsiType parameterType = PsiTypesUtil.getParameterType(parameters, parameterPosition, isVarargs); final PsiSubstitutor substitutor = result.getSubstitutor(); final PsiType type = GenericsUtil.getVariableTypeByExpressionType(substitutor.substitute(parameterType)); if (type == null) { return null; } final TypeStringCreator typeStringCreator = new TypeStringCreator(); type.accept(typeStringCreator); if (typeStringCreator.isModified()) { final PsiManager manager = method.getManager(); final Project project = manager.getProject(); final PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory(); try { final String typeString = typeStringCreator.getTypeString(); return factory.createTypeFromText(typeString, method); } catch (IncorrectOperationException e) { throw new AssertionError("incorrect type string generated from " + type + ": " + e.getMessage()); } } return type; }