public void initExpressionConstraints(PsiParameter[] parameters,
                                        PsiExpression[] args,
                                        PsiMethod method,
                                        boolean varargs) {
    if (method != null) {
      initThrowsConstraints(method);
    }
    if (parameters.length > 0) {
      for (int i = 0; i < args.length; i++) {
        //don't infer anything if number of parameters differ and method is not vararg
        if (!varargs && i >= parameters.length) {
          continue;
        }

        if (args[i] != null && isPertinentToApplicability(args[i], method)) {
          PsiType parameterType = getParameterType(parameters, i, mySiteSubstitutor, varargs);
          if (method != null && PsiUtil.isRawSubstitutor(method, mySiteSubstitutor)) {
            parameterType = TypeConversionUtil.erasure(parameterType);
          }
          LOG.assertTrue(parameterType != null);
          if (!ignoreLambdaConstraintTree(args[i])) {
            addConstraint(new ExpressionCompatibilityConstraint(args[i], substituteWithInferenceVariables(parameterType)));
          }
        }
      }
    }
  }
public void initExpressionConstraints(PsiParameter[] parameters,
                                        PsiExpression[] args,
                                        PsiMethod method,
                                        boolean varargs)