@NotNull
  private static List<@NotNull PyCallableType> getExplicitResolveResults(@NotNull PyCallExpression call,
                                                                         @NotNull PyResolveContext resolveContext) {
    final var callee = call.getCallee();
    if (callee == null) return Collections.emptyList();

    final TypeEvalContext context = resolveContext.getTypeEvalContext();
    final var calleeType = context.getType(callee);

    final var provided = StreamEx
      .of(PyTypeProvider.EP_NAME.getExtensionList())
      .map(e -> e.prepareCalleeTypeForCall(calleeType, call, context))
      .nonNull()
      .toList();
    if (!provided.isEmpty()) return ContainerUtil.mapNotNull(provided, Ref::deref);

    final List<PyCallableType> result = new ArrayList<>();

    for (PyType type : PyTypeUtil.toStream(calleeType)) {
      if (type instanceof PyClassType classType) {

        final var implicitlyInvokedMethods =
          forEveryScopeTakeOverloadsOtherwiseImplementations(
            resolveImplicitlyInvokedMethods(classType, call, resolveContext),
            context
          );

        if (implicitlyInvokedMethods.isEmpty()) {
          result.add(classType);
        }
        else {
          result.addAll(changeToImplicitlyInvokedMethods(classType, implicitlyInvokedMethods, call, context));
        }
      }
      else if (type instanceof PyCallableType) {
        result.add((PyCallableType)type);
      }
    }

    return result;
  }
@NotNull
  private static List<@NotNull PyCallableType> getExplicitResolveResults(@NotNull PyCallExpression call,
                                                                         @NotNull PyResolveContext resolveContext)