/// <summary>
 /// Initializes a new instance of the <see cref="TsTypeSymbol" /> class.
 /// </summary>
 /// <param name="name">The name.</param>
 /// <param name="symbolKind">The kind of symbol.</param>
 /// <param name="baseTypeSymbol">The base type symbol.</param>
 /// <param name="interfaceTypeSymbols">The interface type symbols.</param>
 /// <param name="propertySymbols">The property symbols.</param>
 /// <param name="typeMetadata">The type metadata.</param>
 internal TsTypeSymbol(string name, TsSymbolKind symbolKind, TsTypeSymbol baseTypeSymbol,
                       IReadOnlyList <TsTypeSymbol> interfaceTypeSymbols, IReadOnlyList <TsPropertySymbol> propertySymbols,
                       TsTypeMetadata typeMetadata)
 {
     this.Name         = name;
     this.Kind         = symbolKind;
     this.Base         = baseTypeSymbol;
     this.Interfaces   = interfaceTypeSymbols;
     this.Properties   = propertySymbols;
     this.TypeMetadata = typeMetadata;
 }
        /// <summary>
        /// Loads a <see cref="TsTypeSymbol" /> from the specified <see cref="TsTypeMetadata" /> using the <see cref="TsSymbolLookup" />.
        /// </summary>
        /// <param name="typeMetadata">The type metadata.</param>
        /// <param name="symbolLookup">The symbol lookup.</param>
        /// <param name="options">The options.</param>
        /// <returns>A <see cref="TsTypeSymbol" />.</returns>
        internal static TsTypeSymbol LoadFrom(TsTypeMetadata typeMetadata, TsSymbolLookup symbolLookup, ISymbolLoadOptions options)
        {
            if (typeMetadata.Type.IsGenericType)
            {
                throw new NotSupportedException("Generic types are not currently supported.");
            }

            TsTypeSymbol baseTypeSymbol = null;

            if (typeMetadata.Type.IsClass &&
                !typeMetadata.Flatten &&
                typeMetadata.Type.BaseType != null &&
                typeMetadata.Type.BaseType != typeof(object))
            {
                baseTypeSymbol = symbolLookup.ResolveSymbol(typeMetadata.Type.BaseType);
            }

            List <TsTypeSymbol> interfaceTypeSymbols = new List <TsTypeSymbol>();

            if (!typeMetadata.Flatten)
            {
                foreach (Type interfaceType in typeMetadata.Type.GetInterfaces())
                {
                    if (symbolLookup.TryResolveSymbol(interfaceType, out TsTypeSymbol interfaceTypeSymbol))
                    {
                        interfaceTypeSymbols.Add(interfaceTypeSymbol);
                    }
                }
            }

            List <TsPropertySymbol> propertySymbols = new List <TsPropertySymbol>();

            foreach (PropertyInfo property in typeMetadata.GetProperties())
            {
                propertySymbols.Add(TsPropertySymbol.LoadFrom(property, symbolLookup, options));
            }

            TsTypeSymbol symbol = new TsTypeSymbol
                                  (
                name: typeMetadata.Name,
                symbolKind: GetSymbolKind(typeMetadata),
                baseTypeSymbol,
                interfaceTypeSymbols,
                propertySymbols,
                typeMetadata
                                  );

            return(symbol);
        }
Exemple #3
0
 private static bool IsTypeScriptType(Type type)
 {
     return(TsTypeMetadata.LoadFrom(type).ExplicitOptIn);
 }
 /// <summary>
 /// Gets the <see cref="TsSymbolKind"/> of the <see cref="TsTypeMetadata"/>.
 /// </summary>
 /// <param name="typeMetadata">The type metadata.</param>
 /// <returns>A <see cref="TsSymbolKind" />.</returns>
 private static TsSymbolKind GetSymbolKind(TsTypeMetadata typeMetadata)
 {
     return(GetSymbolKind(typeMetadata.Type));
 }
        /// <summary>
        /// Loads a <see cref="TsTypeSymbol" /> from the specified <see cref="Kind" /> using the <see cref="TsSymbolLookup" />.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="symbolLookup">The symbol lookup.</param>
        /// <param name="options">The options.</param>
        /// <returns>A <see cref="TsTypeSymbol" />.</returns>
        internal static TsTypeSymbol LoadFrom(Type type, TsSymbolLookup symbolLookup, ISymbolLoadOptions options)
        {
            TsTypeMetadata typeMetadata = TsTypeMetadata.LoadFrom(type);

            return(LoadFrom(typeMetadata, symbolLookup, options));
        }