@Override
    public void fill(Parameter parameter, Type type, Annotation[] annotations)
    {
        boolean isFlag = false;
        boolean isNamed = false;
        for (Annotation annotation : annotations)
        {
            if (annotation instanceof Flag)
            {
                if (isNamed)
                {
                    throw new IllegalArgumentException("Parameter cannot be Flag and Named");
                }
                fillFlag((Flag)annotation, parameter);
                isFlag = true;
            }
            if (annotation instanceof Named)
            {
                if (isFlag)
                {
                    throw new IllegalArgumentException("Parameter cannot be Flag and Named");
                }
                fillNamed((Named)annotation, parameter);
                isNamed = true;
            }
        }
        if (!isFlag && !isNamed)
        {
            fillIndexed(parameter);
        }
    }