PsiExpression getLambdaCandidateFromExplicitCall(PsiMethodCallExpression explicitCall) {
    if (myExplicitParameterType == null) return null;
    String name = explicitCall.getMethodExpression().getReferenceName();
    if (name == null) return null;
    if (myExplicitMethod.equals("*")) {
      if (!myLambdaMethod.matcher(name).matches()) return null;
    }
    else if (!myExplicitMethod.equals(name)) {
      return null;
    }
    PsiExpression[] args = explicitCall.getArgumentList().getExpressions();
    if (args.length == 0) return null;
    int index = myParameterIndex == -1 ? args.length - 1 : myParameterIndex;
    if (args.length <= index) return null;
    PsiExpression arg = args[index];
    if (arg instanceof PsiFunctionalExpression) return null;
    if (!LambdaGenerationUtil.canBeUncheckedLambda(arg)) return null;
    PsiMethod method = explicitCall.resolveMethod();
    if (method == null) return null;
    PsiParameter[] parameters = method.getParameterList().getParameters();
    if (parameters.length <= index) return null;
    PsiType type = parameters[index].getType();
    if (!type.equalsToText(myExplicitParameterType)) return null;
    if (!InheritanceUtil.isInheritor(method.getContainingClass(), false, myClass)) return null;
    return arg;
  }
PsiExpression getLambdaCandidateFromExplicitCall(PsiMethodCallExpression explicitCall)