private static boolean areFirstArgumentsApplicable(PsiType @NotNull [] args,
                                                     PsiParameter @NotNull [] parameters,
                                                     @NotNull LanguageLevel languageLevel,
                                                     @NotNull PsiSubstitutor substitutorForMethod,
                                                     boolean isRaw,
                                                     boolean allowUncheckedConversion, ApplicabilityChecker function) {
    for (int i = 0; i < parameters.length - 1; i++) {
      PsiType type = args[i];
      if (type == null) return false;
      PsiParameter parameter = parameters[i];
      PsiType substitutedParmType = getParameterType(parameter, languageLevel, substitutorForMethod);
      if (isRaw) {
        PsiType substErasure = TypeConversionUtil.erasure(substitutedParmType);
        if (substErasure != null && !function.isApplicable(substErasure, type, allowUncheckedConversion, i)) {
          return false;
        }
      }
      else if (!function.isApplicable(substitutedParmType, type, allowUncheckedConversion, i)) {
        return false;
      }
    }
    return true;
  }
private static boolean areFirstArgumentsApplicable(PsiType @NotNull [] args,
                                                     PsiParameter @NotNull [] parameters,
                                                     @NotNull LanguageLevel languageLevel,
                                                     @NotNull PsiSubstitutor substitutorForMethod,
                                                     boolean isRaw,
                                                     boolean allowUncheckedConversion, ApplicabilityChecker function)