private ArrayList<Parameter> suggestParameters(CommandInvocation invocation, List<Parameter> positional,
                                                   List<Parameter> nonPositional, List<Parameter> flags,
                                                   Parameter greedy)
    {
        ArrayList<Parameter> suggestions = new ArrayList<>();
        if (greedy != null && greedy.isAllowed(invocation))
        {
            suggestions.add(greedy);
        }
        if (!positional.isEmpty())
        {
            if (positional.get(0).isAllowed(invocation))
            {
                suggestions.add(positional.get(0));
            }
        }
        for (Parameter parameter : nonPositional)
        {
            if (parameter.isAllowed(invocation))
            {
                suggestions.add(parameter);
            }
        }
        for (Parameter flag : flags)
        {
            if (flag.isAllowed(invocation))
            {
                suggestions.add(flag);
            }
        }
        return suggestions;
    }