4 using SharpYaml.Serialization;
 
    5 using SharpYaml.Serialization.Serializers;
 
    6 using SiliconStudio.Core.Reflection;
 
   10 namespace SiliconStudio.Core.Yaml
 
   18         private readonly 
bool keepOnlySealedOverrides;
 
   21         private const char PostFixSealed = 
'!';
 
   23         private const char PostFixNew = 
'*';
 
   25         private const string PostFixNewSealed = 
"*!";
 
   27         private const string PostFixNewSealedAlt = 
"!*";
 
   30         public OverrideKeyMappingTransform(
ITypeDescriptorFactory typeDescriptorFactory, 
bool keepOnlySealedOverrides)
 
   32             if (typeDescriptorFactory == null) 
throw new ArgumentNullException(
"typeDescriptorFactory");
 
   33             this.typeDescriptorFactory = typeDescriptorFactory;
 
   34             this.keepOnlySealedOverrides = keepOnlySealedOverrides;
 
   37         public override void WriteMemberName(ref ObjectContext objectContext, SharpYaml.Serialization.IMemberDescriptor member, 
string memberName)
 
   44                 if (customDescriptor == null)
 
   46                     customDescriptor = typeDescriptorFactory.Find(objectContext.Instance.GetType())[memberName];
 
   47                     member.Tag = customDescriptor;
 
   50                 if (customDescriptor != null)
 
   52                     var overrideType = objectContext.Instance.GetOverride(customDescriptor);
 
   53                     if (!keepOnlySealedOverrides && (overrideType & 
OverrideType.New) != 0)
 
   55                         memberName += PostFixNew;
 
   59                         memberName += PostFixSealed;
 
   64             base.WriteMemberName(ref objectContext, member, memberName);
 
   67         public override string ReadMemberName(ref ObjectContext objectContext, 
string memberName)
 
   69             var newMemberName = memberName.Trim(PostFixSealed, PostFixNew);
 
   71             if (newMemberName.Length != memberName.Length)
 
   73                 var overrideType = OverrideType.Base;
 
   74                 if (memberName.Contains(PostFixNewSealed) || memberName.EndsWith(PostFixNewSealedAlt))
 
   76                     overrideType = OverrideType.New | OverrideType.Sealed;
 
   78                 else if (memberName.EndsWith(PostFixNew))
 
   80                     overrideType = OverrideType.New;
 
   82                 else if (memberName.EndsWith(PostFixSealed))
 
   84                     overrideType = OverrideType.Sealed;
 
   90                     if (keepOnlySealedOverrides && overrideType.IsSealed())
 
   92                         overrideType = OverrideType.Base | OverrideType.Sealed;
 
   95                     var objectType = objectContext.Instance.GetType();
 
   96                     if (cachedDescriptor == null || cachedDescriptor.Type != objectType)
 
   98                         cachedDescriptor = typeDescriptorFactory.Find(objectType);
 
  100                     var memberDescriptor = cachedDescriptor[newMemberName];
 
  101                     objectContext.Instance.SetOverride(memberDescriptor, overrideType);
 
  105             return base.ReadMemberName(ref objectContext, newMemberName);
 
Describe a member of an object. 
 
Provides access members of a type. 
 
OverrideType
A Type of override used on a member value. 
 
A factory to create an instance of a ITypeDescriptor