Esempio n. 1
0
 private void SetInfo(Type type, string name, Func <string> fullName, string @namespace)
 {
     RealType      = type;
     Accessibility = type.ConvertAccessibilityInfo();
     IsStatic      = type.IsAbstract && type.IsSealed;
     Name          = name;
     Namespace     = @namespace;
     baseType      = new Lazy <ITypeSymbolInfo>(() => RealType.BaseType?.GetSymbolInfo());
     if (type.IsGenericType)
     {
         TypeArguments  = EnumerableExtensions.CreateLazyImmutableArray(() => type.GenericTypeArguments.Select(i => i.GetSymbolInfo()));
         TypeParameters = EnumerableExtensions.CreateLazyImmutableArray <ITypeParameterSymbolInfo>(() => (type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition()).GetGenericArguments().Select(i => new TypeParameterSymbolInfo(i)));
         Func <IEnumerable <ITypeSymbolInfo> > genericParams = () => type.IsGenericTypeDefinition ? TypeParameters.Cast <ITypeSymbolInfo>() : TypeArguments;
         Name = genericParamsNumber.Replace(name, string.Empty);
         Func <string> newFullName = () => genericParamsNumber.Replace($"{(type.IsNested ? type.DeclaringType.GetSymbolInfo().FullName : Namespace)}.{Name}", string.Empty);
         genericDefinitionName = new Lazy <string>(() => $"{newFullName()}<{genericParams().Select(i => string.Empty).InsertSeparator(",").Aggregate((i, j) => i + j)}>");
         fullName = () => $"{newFullName()}<{genericParams().Select(i => i.FullName).InsertSeparator(",").Aggregate((i, j) => i + j)}>";
     }
     else
     {
         genericDefinitionName = new Lazy <string>(() => string.Empty);
         TypeArguments         = EnumerableExtensions.EmptyImmutableArray <ITypeSymbolInfo>();
         TypeParameters        = EnumerableExtensions.EmptyImmutableArray <ITypeParameterSymbolInfo>();
     }
     this.fullName = new Lazy <string>(fullName);
     Attributes    = EnumerableExtensions.CreateLazyImmutableArray <IAttributeSymbolInfo>(() => RealType.GetCustomAttributesData().Select(i => new AttributeSymbolInfo(i)));
     Interfaces    = EnumerableExtensions.CreateLazyImmutableArray(() => RealType.GetInterfaces().Distinct().Select(i => i.GetSymbolInfo()));
     Members       = EnumerableExtensions.CreateLazyImmutableArray(() => RealType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)
                                                                   .Select(RuntimeSymbolExtensions.ConvertToStructure)
                                                                   .Where(i => i != null));
     isAnonymousType = new Lazy <bool>(() => Attribute.IsDefined(RealType, typeof(CompilerGeneratedAttribute), false) &&
                                       RealType.Name.Contains("AnonymousType") &&
                                       RealType.Name.StartsWith("<>"));
 }