public Argument(ArgumentAttribute attribute, FieldInfo field, ErrorReporter reporter)
            {
                _longName = CommandLineParser.LongName(attribute, field);
                _explicitShortName = CommandLineParser.ExplicitShortName(attribute);
                _shortName = CommandLineParser.ShortName(attribute, field);
                _hasHelpText = CommandLineParser.HasHelpText(attribute);
                _helpText = CommandLineParser.HelpText(attribute);
                _defaultValue = CommandLineParser.DefaultValue(attribute);
                _elementType = ElementType(field);
                _flags = Flags(attribute, field);
                _field = field;
                _seenValue = false;
                _reporter = reporter;
                _isDefault = attribute != null && attribute is DefaultArgumentAttribute;

                if (IsCollection)
                {
                    _collectionValues = new ArrayList();
                }

                Debug.Assert(!string.IsNullOrEmpty(_longName));
                Debug.Assert(!_isDefault || !ExplicitShortName);
                Debug.Assert(!IsCollection || AllowMultiple, "Collection arguments must have allow multiple");
                Debug.Assert(!Unique || IsCollection, "Unique only applicable to collection arguments");
                Debug.Assert(IsValidElementType(Type) || IsCollectionType(Type));
                Debug.Assert((IsCollection && IsValidElementType(_elementType)) ||
                             (!IsCollection && _elementType == null));
                Debug.Assert(!(IsRequired && HasDefaultValue), "Required arguments cannot have default value");
                Debug.Assert(!HasDefaultValue || (_defaultValue.GetType() == field.FieldType),
                             "Type of default value must match field type");
            }
 public static string LongName(ArgumentAttribute attribute, FieldInfo field)
 {
     return (attribute == null || attribute.DefaultLongName) ? field.Name : attribute.LongName;
 }
 public static string ShortName(ArgumentAttribute attribute, FieldInfo field)
 {
     if (attribute is DefaultArgumentAttribute)
         return null;
     if (!ExplicitShortName(attribute))
         return LongName(attribute, field).Substring(0, 1);
     return attribute.ShortName;
 }
 public static string HelpText(ArgumentAttribute attribute)
 {
     return attribute == null ? null : attribute.HelpText;
 }
 public static bool HasHelpText(ArgumentAttribute attribute)
 {
     return (attribute != null && attribute.HasHelpText);
 }
        public static ArgumentType Flags(ArgumentAttribute attribute, FieldInfo field)
        {
            if (attribute != null)
            {
                return attribute.Type;
            }

            return IsCollectionType(field.FieldType) ? ArgumentType.MultipleUnique : ArgumentType.AtMostOnce;
        }
 public static bool ExplicitShortName(ArgumentAttribute attribute)
 {
     return (attribute != null && !attribute.DefaultShortName);
 }
 public static object DefaultValue(ArgumentAttribute attribute)
 {
     return (attribute == null || !attribute.HasDefaultValue) ? null : attribute.DefaultValue;
 }