/// <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); }
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)); }