private static @Nullable PsiType extractFunctionalConjunct(PsiIntersectionType type) {
    PsiType conjunct = null;
    PsiClass commonClass = null;
    MethodSignature commonSignature = null;
    for (PsiType psiType : type.getConjuncts()) {
      PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(psiType);
      if (aClass instanceof PsiTypeParameter) continue;
      MethodSignature signature = getFunction(aClass);
      if (signature == null) continue;
      if (commonSignature == null) {
        commonSignature = signature;
        commonClass = aClass;
      }
      else if (!MethodSignatureUtil.areSignaturesEqual(commonSignature, signature)) {
        return null;
      }
      conjunct = psiType;
    }
    if (conjunct == null) {
      return null;
    }
    PsiMethod method = getMethod(commonClass, commonSignature);
    if (method == null) {
      return null;
    }
    for (PsiType typeConjunct : type.getConjuncts()) {
      if (typeConjunct == conjunct) {
        continue;
      }
      TargetMethodContainer container = getTargetMethod(typeConjunct, commonSignature, conjunct);
      if (container == null) {
        continue;
      }
      PsiMethod inheritor = container.inheritor;
      PsiMethod target = container.targetMethod;
      if (!inheritor.hasModifier(JvmModifier.ABSTRACT) &&
          isLambdaSubsignature(method, conjunct, target, typeConjunct)) {
        return null;
      }
    }
    return conjunct;
  }
private static @Nullable PsiType extractFunctionalConjunct(PsiIntersectionType type)