Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        public virtual TypeDefinition GetBaseTypeDefinition(TypeDefinition type)
        {
            var reference = type.BaseType;

            if (reference == null)
            {
                return(null);
            }

            return(H5Types.Get(reference).TypeDefinition);
        }
Esempio n. 4
0
 public virtual TypeDefinition GetTypeDefinition(IType type)
 {
     return(H5Types.Get(type).TypeDefinition);
 }