using PostSharp.Aspects;
using PostSharp.Extensibility;
using PostSharp.Reflection;
using PostSharp.Serialization;
 
namespace PostSharp.Samples.NormalizeString
{
    [PSerializable]
    class NormalizeStringAttribute : LocationInterceptionAspect
    {
        public override bool CompileTimeValidate( LocationInfo locationInfo )
        {
            if ( locationInfo.LocationType != typeof( string ) )
            {
                Message.Write( locationInfo, SeverityType.Error, "MY001", "[NormalizeString] cannot be applied to {0} because its type is not string.", locationInfo );
                return false;
            }
 
            return true;
        }
        public override void OnSetValue( LocationInterceptionArgs args )
        {
            if ( args.Value != null )
            {
                args.Value = ((string) args.Value).Trim().ToLowerInvariant();
            }
 
            args.ProceedSetValue();
        }
    }
}