/// <summary>
        /// Perform compile-time validation
        /// </summary>
        public override bool CompileTimeValidate(LocationInfo locationInfo)
        {
            if (!_hasValue)
            {
                return(this.RaiseError(1, "The specified type '{0}' does not have a converter that can parse: {1}".F(_valueType.FullName, _valueString), locationInfo.AsSignature()));
            }

            if (locationInfo.FieldInfo == null && locationInfo.PropertyInfo.GetSetMethod(true) == null)
            {
                return(this.RaiseError(2, "The aspect can only be applied to a property if it has a setter.", locationInfo.AsSignature()));
            }


            if (_value == null)
            {
                this.RaiseWarning(3, "Not applying the aspect as it would return a 'null' on initialization.", locationInfo.AsSignature());

                return(false);
            }

            if (locationInfo.FieldInfo == null)
            {
                this.Describe("When the property is 'get' for the first time, the defined default value will be created, set using the 'setter' and then returned, but only if there was nothing 'set' before.", locationInfo);
            }
            else
            {
                this.Describe("When the field is 'get' for the first time, the defined default value will be created, stored and returned, but only if there was nothing 'set' before.", locationInfo);
            }

            return(base.CompileTimeValidate(locationInfo));
        }
        /// <summary>
        /// Perform compile-time validation
        /// </summary>
        public override bool CompileTimeValidate(LocationInfo locationInfo)
        {
            if (!_hasValue)
            {
                return this.RaiseError(1, "The specified type '{0}' does not have a converter that can parse: {1}".F(_valueType.FullName, _valueString), locationInfo.AsSignature());
            }

            if (locationInfo.FieldInfo == null && locationInfo.PropertyInfo.GetSetMethod(true) == null)
            {
                return this.RaiseError(2, "The aspect can only be applied to a property if it has a setter.", locationInfo.AsSignature());
            }

            if (_value == null)
            {
                this.RaiseWarning(3, "Not applying the aspect as it would return a 'null' on initialization.", locationInfo.AsSignature());

                return false;
            }

            if (locationInfo.FieldInfo == null)
            {
                this.Describe("When the property is 'get' for the first time, the defined default value will be created, set using the 'setter' and then returned, but only if there was nothing 'set' before.", locationInfo);
            }
            else
            {
                this.Describe("When the field is 'get' for the first time, the defined default value will be created, stored and returned, but only if there was nothing 'set' before.", locationInfo);
            }

            return base.CompileTimeValidate(locationInfo);
        }