@NotNull
  private static List<String> collectParameterNamesFromType(@NotNull PyCallableType type,
                                                            @NotNull PyCallExpression callSite,
                                                            @NotNull TypeEvalContext context) {
    List<String> result = new ArrayList<>();
    if (type.isCallable()) {
      final List<PyCallableParameter> parameters = type.getParameters(context);
      if (parameters != null) {
        int indexOfPySlashParameter = getIndexOfPySlashParameter(parameters);
        for (PyCallableParameter parameter : parameters.subList(indexOfPySlashParameter + 1, parameters.size())) {
          if (parameter.isKeywordContainer() || parameter.isPositionalContainer()) {
            continue;
          }
          ContainerUtil.addIfNotNull(result, parameter.getName());
        }
        PyFunction func = null;
        if (type.getCallable() instanceof PyFunction) {
          func = as(type.getCallable(), PyFunction.class);
        }
        else if (type instanceof PyClassType) {
          func = ((PyClassType)type).getPyClass().findInitOrNew(true, context);
        }
        if (func != null) {
          addKeywordArgumentVariantsForFunction(callSite, func, result, new HashSet<>(), context);
        }
      }
    }
    return result;
  }
@NotNull
  private static List<String> collectParameterNamesFromType(@NotNull PyCallableType type,
                                                            @NotNull PyCallExpression callSite,
                                                            @NotNull TypeEvalContext context)