List<IntentionAction> (@NotNull PsiMethodCallExpression methodCall, @NotNull PsiExpressionList list) { final JavaResolveResult result = methodCall.getMethodExpression().advancedResolve(false); PsiMethod method = (PsiMethod) result.getElement(); final PsiSubstitutor substitutor = result.getSubstitutor(); PsiExpression[] expressions = list.getExpressions(); if (method == null) return Collections.emptyList(); final PsiParameter[] parameters = method.getParameterList().getParameters(); if (parameters.length != expressions.length) return Collections.emptyList(); List<IntentionAction> actions = new ArrayList<>(); for (int i = 0; i < expressions.length; i++) { final PsiExpression expression = expressions[i]; PsiType expressionType = expression.getType(); if (expressionType instanceof PsiPrimitiveType) { expressionType = ((PsiPrimitiveType)expressionType).getBoxedType(expression); } if (expressionType == null) continue; final PsiParameter parameter = parameters[i]; final PsiType formalParamType = parameter.getType(); final PsiType parameterType = substitutor.substitute(formalParamType); if (parameterType.isAssignableFrom(expressionType)) continue; final PsiExpression qualifierExpression = methodCall.getMethodExpression().getQualifierExpression(); if (qualifierExpression instanceof PsiReferenceExpression) { final PsiElement resolved = ((PsiReferenceExpression)qualifierExpression).resolve(); if (resolved instanceof PsiVariable) { final PsiType varType = ((PsiVariable)resolved).getType(); final PsiClass varClass = PsiUtil.resolveClassInType(varType); final Project project = expression.getProject(); final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(project).getResolveHelper(); if (varClass != null) { final PsiSubstitutor psiSubstitutor = resolveHelper.inferTypeArguments(varClass.getTypeParameters(), parameters, expressions, PsiSubstitutor.EMPTY, resolved, DefaultParameterTypeInferencePolicy.INSTANCE); if (ContainerUtil.exists(psiSubstitutor.getSubstitutionMap().values(), t -> t != null && t.equalsToText(CommonClassNames.JAVA_LANG_VOID))) { continue; } final PsiType appropriateVarType = GenericsUtil.getVariableTypeByExpressionType(JavaPsiFacade.getElementFactory( project).createType(varClass, psiSubstitutor)); if (!varType.equals(appropriateVarType)) { actions.add(new VariableTypeFromCallFix(appropriateVarType, (PsiVariable)resolved)); break; } } } } actions.addAll(getParameterTypeChangeFixes(method, expression, parameterType)); } return actions; }