static ITypeDescription Create(Type knownType, IDictionary <Type, ITypeDescription> knownTypes, IEnumerable <ITypeDescription> generics, IndexStateLookup indexLookUp) { if (knownType.IsGenericTypeDefinition && knownType.GetGenericArguments().Length != generics.Count()) { throw new ArgumentException("The generic arguments have to match."); } if (generics.Any()) { return(new KnownGenericType(knownType, FieldInitializer(knownType, knownTypes, indexLookUp), generics)); } if (knownType.IsGenericParameter) { return(new GenericVariable(knownType)); } return(new KnownType(knownType, CreateTypeName(knownType), FieldInitializer(knownType, knownTypes, indexLookUp))); }
private static SimpleFieldDescription ToFieldDescription(TypeName declaringType, Type fieldType, string name, IDictionary <Type, ITypeDescription> knownTypes, IndexStateLookup indexLookUp) { var type = knownTypes.TryGet(fieldType) .GetValue(() => Create(fieldType, knownTypes, new ITypeDescription[0], indexLookUp)); return(SimpleFieldDescription.Create(name, type, indexLookUp(declaringType, name, type.TypeName))); }
public static ITypeDescription Create(Type knownType, IEnumerable <ITypeDescription> generics, IndexStateLookup indexLookUp) { new{ knownType, generics }.CheckNotNull(); return(Create(knownType, new Dictionary <Type, ITypeDescription>(), generics, indexLookUp)); }
private static Func <ITypeDescription, IEnumerable <SimpleFieldDescription> > FieldInitializer(Type knownType, IDictionary <Type, ITypeDescription> knownTypes, IndexStateLookup indexLookUp) { return(t => { knownTypes[knownType] = t; return ListFields(t.TypeName, knownType, knownTypes, indexLookUp); }); }
static IEnumerable <SimpleFieldDescription> ListFields(TypeName declaringType, Type type, IDictionary <Type, ITypeDescription> knownTypes, IndexStateLookup indexLookUp) { return(type.GetProperties().Select(p => ToFieldDescription(declaringType, p.PropertyType, p.Name, knownTypes, indexLookUp)) .Union(type.GetFields().Select(f => ToFieldDescription(declaringType, f.FieldType, f.Name, knownTypes, indexLookUp))).ToList()); }
public static ITypeDescription Create(Type knownType, IEnumerable<ITypeDescription> generics,IndexStateLookup indexLookUp) { new{knownType,generics}.CheckNotNull(); return Create(knownType, new Dictionary<Type, ITypeDescription>(), generics, indexLookUp); }
private static SimpleFieldDescription ToFieldDescription(TypeName declaringType,Type fieldType,string name, IDictionary<Type, ITypeDescription> knownTypes, IndexStateLookup indexLookUp) { var type = knownTypes.TryGet(fieldType) .GetValue(() => Create(fieldType, knownTypes,new ITypeDescription[0],indexLookUp)); return SimpleFieldDescription.Create(name, type, indexLookUp(declaringType, name, type.TypeName)); }
static IEnumerable<SimpleFieldDescription> ListFields(TypeName declaringType,Type type, IDictionary<Type, ITypeDescription> knownTypes, IndexStateLookup indexLookUp) { return type.GetProperties().Select(p => ToFieldDescription(declaringType,p.PropertyType, p.Name, knownTypes, indexLookUp)) .Union(type.GetFields().Select(f => ToFieldDescription(declaringType,f.FieldType, f.Name, knownTypes, indexLookUp))).ToList(); }
private static Func<ITypeDescription, IEnumerable<SimpleFieldDescription>> FieldInitializer(Type knownType, IDictionary<Type, ITypeDescription> knownTypes, IndexStateLookup indexLookUp) { return t => { knownTypes[knownType] = t; return ListFields(t.TypeName,knownType, knownTypes, indexLookUp); }; }
static ITypeDescription Create(Type knownType, IDictionary<Type, ITypeDescription> knownTypes, IEnumerable<ITypeDescription> generics, IndexStateLookup indexLookUp) { if (knownType.IsGenericTypeDefinition && knownType.GetGenericArguments().Length != generics.Count()) { throw new ArgumentException("The generic arguments have to match."); } if(generics.Any()) { return new KnownGenericType(knownType, FieldInitializer(knownType, knownTypes, indexLookUp), generics); } if (knownType.IsGenericParameter) { return new GenericVariable(knownType); } return new KnownType(knownType, CreateTypeName(knownType), FieldInitializer(knownType, knownTypes, indexLookUp)); }