List<String> (@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; }