private bool ProcessCollection(IFacetHolder holder) { var typeOfFacet = holder.GetFacet<ITypeOfFacet>(); Type collectionElementType; if (typeOfFacet != null) { collectionElementType = typeOfFacet.Value; } else { collectionElementType = typeof (object); holder.AddFacet(new TypeOfFacetDefaultToObject(holder, Reflector)); } holder.AddFacet(new DotNetCollectionFacet(holder, collectionElementType)); return true; }
public override bool Process(PropertyInfo property, IMethodRemover methodRemover, IFacetHolder holder) { if (CollectionUtils.IsCollectionButNotArray(property.PropertyType)) { holder.AddFacet(new CollectionResetFacet(property, holder)); return true; } return base.Process(property, methodRemover, holder); }
public virtual void Reparent(IFacetHolder newFacetHolder) { IFacetHolder oldFacetHolder = FacetHolder; oldFacetHolder.RemoveFacet(this); newFacetHolder.AddFacet(this); if (FacetHolder != newFacetHolder) { FacetHolder = newFacetHolder; } }
private void DecoratedFacet(Type facetType, IFacetHolder holder) { if (facetDecorators.ContainsKey(facetType)) { foreach (IFacetDecorator decorator in facetDecorators[facetType]) { IFacet previousFacet = holder.GetFacet(facetType); IFacet decoratedFacet = decorator.Decorate(previousFacet, holder); if (decoratedFacet != null && decoratedFacet != previousFacet) { holder.AddFacet(decoratedFacet); } } } }
private bool ProcessGenericEnumerable(Type type, IFacetHolder holder) { var typeOfFacet = holder.GetFacet<ITypeOfFacet>(); bool isCollection = CollectionUtils.IsGenericCollection(type); // as opposed to IEnumerable bool isQueryable = CollectionUtils.IsGenericQueryable(type); bool isSet = CollectionUtils.IsSet(type); Type collectionElementType; if (typeOfFacet != null) { collectionElementType = typeOfFacet.Value; } else { collectionElementType = CollectionUtils.ElementType(type); holder.AddFacet(new TypeOfFacetInferredFromGenerics(collectionElementType, holder, Reflector)); } Type facetType = isQueryable ? typeof (DotNetGenericIQueryableFacet<>) : (isCollection ? typeof (DotNetGenericCollectionFacet<>) : typeof (DotNetGenericIEnumerableFacet<>)); Type genericFacet = facetType.GetGenericTypeDefinition(); Type genericCollectionFacetType = genericFacet.MakeGenericType(CollectionUtils.ElementType(type)); var facet = (IFacet) Activator.CreateInstance(genericCollectionFacetType, holder, collectionElementType, isSet); holder.AddFacet(facet); return true; }
private bool ProcessArray(Type type, IFacetHolder holder) { holder.AddFacet(new DotNetArrayFacet(holder, type.GetElementType())); holder.AddFacet(new TypeOfFacetInferredFromArray(type.GetElementType(), holder, Reflector)); return true; }