public static Applicability isApplicableConcrete(PsiType @Nullable [] argumentTypes,
                                                   @NotNull PsiMethod method,
                                                   PsiSubstitutor substitutor,
                                                   PsiElement place,
                                                   final boolean eraseParameterTypes) {
    if (argumentTypes == null) return Applicability.canBeApplicable;
    GrSignature signature = GrClosureSignatureUtil.createSignature(method, substitutor, eraseParameterTypes, place);

    Applicability result = GroovyApplicabilityProvider.checkProviders(argumentTypes, method);
    if (result != null) return result;

    result = GrClosureSignatureUtil.isSignatureApplicableConcrete(singletonList(signature), argumentTypes, place);
    if (result != Applicability.inapplicable) {
      if (eraseParameterTypes || isTypeArgumentsApplicable(method.getTypeParameters(), substitutor, place)) {
        return result;
      }
    }

    return Applicability.inapplicable;
  }
public static Applicability isApplicableConcrete(PsiType @Nullable [] argumentTypes,
                                                   @NotNull PsiMethod method,
                                                   PsiSubstitutor substitutor,
                                                   PsiElement place,
                                                   final boolean eraseParameterTypes)