Пример #1
0
 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)));
 }
Пример #2
0
        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)));
        }
Пример #3
0
 public static ITypeDescription Create(Type knownType,
                                       IEnumerable <ITypeDescription> generics, IndexStateLookup indexLookUp)
 {
     new{ knownType, generics }.CheckNotNull();
     return(Create(knownType,
                   new Dictionary <Type, ITypeDescription>(),
                   generics, indexLookUp));
 }
Пример #4
0
 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);
     });
 }
Пример #5
0
 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());
 }
Пример #6
0
 public static ITypeDescription Create(Type knownType,
     IEnumerable<ITypeDescription> generics,IndexStateLookup indexLookUp)
 {
     new{knownType,generics}.CheckNotNull();
     return Create(knownType,
         new Dictionary<Type, ITypeDescription>(),
         generics, indexLookUp);
 }
Пример #7
0
 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));
 }
Пример #8
0
 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();
 }
Пример #9
0
 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);
                };
 }
Пример #10
0
 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));
 }