Esempio n. 1
0
 public TypeSymbolInfo(ITypeSymbol type)
 {
     RealType      = type;
     Accessibility = type.DeclaredAccessibility.ConvertToStructure();
     Namespace     = type.ContainingNamespace?.ToDisplayString();
     if (type is INamedTypeSymbol namedType)
     {
         IsGenericType  = namedType.IsGenericType;
         IsAbstract     = namedType.IsAbstract;
         TypeArguments  = EnumerableExtensions.CreateLazyImmutableArray <ITypeSymbolInfo>(() => namedType.TypeArguments.Select(i => new TypeSymbolInfo(i)));
         TypeParameters = EnumerableExtensions.CreateLazyImmutableArray <ITypeParameterSymbolInfo>(() => namedType.TypeParameters.Select(i => new TypeParameterSymbolInfo(i)));
         if (IsGenericType)
         {
             genericDefinitionName = new Lazy <string>(() => $"{(RealType.ContainingType == null ? RealType.ContainingNamespace.ToDisplayString() : RealType.ContainingType.ToDisplayString())}.{Name}<{TypeParameters.Skip(1).Select(i => ",").DefaultIfEmpty("").Aggregate((i, j) => i + j)}>");
         }
         else
         {
             genericDefinitionName = new Lazy <string>(() => string.Empty);
         }
     }
     else
     {
         TypeArguments  = EnumerableExtensions.EmptyImmutableArray <ITypeSymbolInfo>();
         TypeParameters = EnumerableExtensions.EmptyImmutableArray <ITypeParameterSymbolInfo>();
     }
     Attributes = EnumerableExtensions.CreateLazyImmutableArray(() => RealType.GetAttributes()
                                                                .Select(AotSymbolExtensions.ConvertToStructure)
                                                                .Where(i => i != null));
     Interfaces = EnumerableExtensions.CreateLazyImmutableArray <ITypeSymbolInfo>(() => RealType.AllInterfaces.Select(i => new TypeSymbolInfo(i)));
     Members    = EnumerableExtensions.CreateLazyImmutableArray(() => RealType.GetMembers()
                                                                .Select(AotSymbolExtensions.ConvertToStructure)
                                                                .Where(i => i != null));
 }