public virtual TypeDefinition GetTypeDefinition(AstType reference, bool safe = false) { var resolveResult = Resolver.ResolveNode(reference) as TypeResolveResult; var type = H5Types.Get(resolveResult.Type, safe); return(type?.TypeDefinition); }
public IList <ITypeInfo> GetParents(IType type, List <ITypeInfo> list = null) { IList <ITypeInfo> result; if (cacheParents.TryGetValue(type, out result)) { list?.AddRange(result); return(result); } bool endPoint = list == null; if (endPoint) { activeTypes = new Stack <IType>(); list = new List <ITypeInfo>(); } var typeDef = type.GetDefinition() ?? type; if (activeTypes.Contains(typeDef)) { return(list); } activeTypes.Push(typeDef); var types = type.GetAllBaseTypes(); var thisTypelist = new List <ITypeInfo>(); foreach (var t in types) { var bType = H5Types.Get(t, true); if (bType?.TypeInfo != null && !bType.Type.Equals(typeDef)) { thisTypelist.Add(bType.TypeInfo); } if (t.TypeArguments.Count > 0) { foreach (var typeArgument in t.TypeArguments) { bType = H5Types.Get(typeArgument, true); if (bType?.TypeInfo != null && !bType.Type.Equals(typeDef)) { thisTypelist.Add(bType.TypeInfo); } GetParents(typeArgument, thisTypelist); } } } list.AddRange(thisTypelist); activeTypes.Pop(); list = list.Distinct().ToList(); cacheParents[type] = list; return(list); }
public virtual TypeDefinition GetBaseTypeDefinition(TypeDefinition type) { var reference = type.BaseType; if (reference == null) { return(null); } return(H5Types.Get(reference).TypeDefinition); }
public virtual TypeDefinition GetTypeDefinition(IType type) { return(H5Types.Get(type).TypeDefinition); }