/// <summary> /// Initialize the tests. /// </summary> public virtual void Initialize() { TypeFactory = new TypeDescriptorFactory(); var myClassDesc = TypeFactory.Find(typeof(MyClass)); var myStructDesc = TypeFactory.Find(typeof(MyStruct)); ListClassDesc = (CollectionDescriptor)TypeFactory.Find(typeof(List<MyClass>)); MapClassDesc = (DictionaryDescriptor)TypeFactory.Find(typeof(Dictionary<string, MyClass>)); MemberValue = myClassDesc.Members.FirstOrDefault(member => member.Name == "Value"); MemberSub = myClassDesc.Members.FirstOrDefault(member => member.Name == "Sub"); MemberStruct = myClassDesc.Members.FirstOrDefault(member => member.Name == "Struct"); MemberSubs = myClassDesc.Members.FirstOrDefault(member => member.Name == "Subs"); MemberMaps = myClassDesc.Members.FirstOrDefault(member => member.Name == "Maps"); MemberX = myStructDesc.Members.FirstOrDefault(member => member.Name == "X"); MemberClass = myStructDesc.Members.FirstOrDefault(member => member.Name == "Class"); }
/// <summary> /// Visits the specified object. /// </summary> /// <param name="obj">The object.</param> /// <param name="descriptor">The descriptor.</param> /// <exception cref="ArgumentNullException"> /// obj /// or /// descriptor /// </exception> /// <exception cref="ArgumentException">Descriptor [{0}] type doesn't correspond to object type [{1}].ToFormat(descriptor.Type, obj.GetType())</exception> protected void Visit(object obj, ITypeDescriptor descriptor) { if (obj == null) { VisitNull(); return; } var objectType = obj.GetType(); if (descriptor == null || descriptor.Type != objectType) { descriptor = TypeDescriptorFactory.Find(objectType); } if (descriptor is NullableDescriptor) { descriptor = TypeDescriptorFactory.Find(((NullableDescriptor)descriptor).UnderlyingType); } context.Instance = obj; context.Descriptor = (ObjectDescriptor)descriptor; switch (descriptor.Category) { case DescriptorCategory.Primitive: VisitPrimitive(obj, (PrimitiveDescriptor)descriptor); break; default: // Note that the behaviour is slightly different if a type has a custom visitor or not. // If it has a custom visitor, it will visit the object even if the object has been already visited // otherwise it will use CanVisit() on this instance. The CanVisit() is tracking a list of // visited objects and it will not revisit the object. IDataCustomVisitor customVisitor; if (!mapTypeToCustomVisitors.TryGetValue(objectType, out customVisitor) && CustomVisitors.Count > 0) { for (var i = CustomVisitors.Count - 1; i >= 0; i--) { var dataCustomVisitor = CustomVisitors[i]; if (dataCustomVisitor.CanVisit(objectType)) { customVisitor = dataCustomVisitor; mapTypeToCustomVisitors.Add(objectType, dataCustomVisitor); break; } } } if (customVisitor != null) { customVisitor.Visit(ref context); } else if (CanVisit(obj)) { VisitObject(obj, context.Descriptor, true); } break; } }
/// <summary> /// Visits the specified object. /// </summary> /// <param name="obj">The object.</param> /// <param name="descriptor">The descriptor.</param> /// <exception cref="System.ArgumentNullException"> /// obj /// or /// descriptor /// </exception> /// <exception cref="System.ArgumentException">Descriptor [{0}] type doesn't correspond to object type [{1}].ToFormat(descriptor.Type, obj.GetType())</exception> protected void Visit(object obj, ITypeDescriptor descriptor) { if (obj == null) { VisitNull(); return; } var objectType = obj.GetType(); if (descriptor == null || descriptor.Type != objectType) { descriptor = TypeDescriptorFactory.Find(objectType); } if (descriptor is NullableDescriptor) { descriptor = TypeDescriptorFactory.Find(((NullableDescriptor)descriptor).UnderlyingType); } context.Instance = obj; context.Descriptor = (ObjectDescriptor)descriptor; switch (descriptor.Category) { case DescriptorCategory.Primitive: VisitPrimitive(obj, (PrimitiveDescriptor)descriptor); break; default: if (CanVisit(obj)) { IDataCustomVisitor customVisitor; if (!mapTypeToCustomVisitors.TryGetValue(objectType, out customVisitor) && CustomVisitors.Count > 0) { for (int i = CustomVisitors.Count - 1; i >= 0; i--) { var dataCustomVisitor = CustomVisitors[i]; if (dataCustomVisitor.CanVisit(objectType)) { customVisitor = dataCustomVisitor; mapTypeToCustomVisitors.Add(objectType, dataCustomVisitor); break; } } } if (customVisitor != null) { customVisitor.Visit(ref context); } else { VisitObject(obj, context.Descriptor, true); } } break; } }
public virtual void VisitArray(Array array, ArrayDescriptor descriptor) { for (int i = 0; i < array.Length; i++) { var value = array.GetValue(i); CurrentPath.Push(descriptor, i); VisitArrayItem(array, descriptor, i, value, value == null ? null : TypeDescriptorFactory.Find(value.GetType())); CurrentPath.Pop(); } }
/// <inheritdoc /> public virtual void VisitArray(Array array, ArrayDescriptor descriptor) { for (var i = 0; i < array.Length; i++) { var value = array.GetValue(i); CurrentPath.Push(descriptor, i); VisitArrayItem(array, descriptor, i, value, TypeDescriptorFactory.Find(value?.GetType() ?? descriptor.ElementType)); CurrentPath.Pop(); } }
public virtual void VisitCollection(IEnumerable collection, CollectionDescriptor descriptor) { int i = 0; foreach (var item in collection) { CurrentPath.Push(descriptor, i); VisitCollectionItem(collection, descriptor, i, item, TypeDescriptorFactory.Find(item?.GetType() ?? descriptor.ElementType)); CurrentPath.Pop(); i++; } }
public virtual void VisitDictionary(object dictionary, DictionaryDescriptor descriptor) { foreach (var keyValue in descriptor.GetEnumerator(dictionary)) { var key = keyValue.Key; var keyDescriptor = keyValue.Key == null ? null : TypeDescriptorFactory.Find(keyValue.Key.GetType()); var value = keyValue.Value; var valueDescriptor = keyValue.Value == null ? null : TypeDescriptorFactory.Find(keyValue.Value.GetType()); CurrentPath.Push(descriptor, key); VisitDictionaryKeyValue(dictionary, descriptor, key, keyDescriptor, value, valueDescriptor); CurrentPath.Pop(); } }
/// <inheritdoc /> public virtual void VisitCollection(IEnumerable collection, CollectionDescriptor descriptor) { var i = 0; // Make a copy in case VisitCollectionItem mutates something var items = collection.Cast <object>().ToList(); foreach (var item in items) { CurrentPath.Push(descriptor, i); VisitCollectionItem(collection, descriptor, i, item, TypeDescriptorFactory.Find(item?.GetType() ?? descriptor.ElementType)); CurrentPath.Pop(); i++; } }
/// <inheritdoc /> public virtual void VisitDictionary(object dictionary, DictionaryDescriptor descriptor) { // Make a copy in case VisitCollectionItem mutates something var items = descriptor.GetEnumerator(dictionary).ToList(); foreach (var keyValue in items) { var key = keyValue.Key; var keyDescriptor = TypeDescriptorFactory.Find(keyValue.Key?.GetType() ?? descriptor.KeyType); var value = keyValue.Value; var valueDescriptor = TypeDescriptorFactory.Find(keyValue.Value?.GetType() ?? descriptor.ValueType); CurrentPath.Push(descriptor, key); VisitDictionaryKeyValue(dictionary, descriptor, key, keyDescriptor, value, valueDescriptor); CurrentPath.Pop(); } }
public override void Initialize() { base.Initialize(); TypeFactory = new TypeDescriptorFactory(); var assetDesc = TypeFactory.Find(typeof(TestAssetUpdate)); memberMyClass = assetDesc.Members.FirstOrDefault(member => member.Name == "MyClass"); if (session != null) { session.Dispose(); dependencyManager.Dispose(); } package = new Package(); session = new PackageSession(package); dependencyManager = new AssetDependencyManager(session); assetUpdater = new AssetUpdater(dependencyManager); }