public static Metadata.DB_Type GetType(Metadata.Expression.TypeSyntax typeSyntax, Metadata.Model model) { if (typeSyntax.isGenericType) { Metadata.DB_Type ma = GetType(typeSyntax.GetTypeDefinitionFullName()); return(Metadata.DB_Type.MakeGenericType(ma, typeSyntax.args, new Metadata.Model(new Finder()))); } if (typeSyntax.isGenericParameter) { //return Metadata.DB_Type.MakeGenericParameterType(GetType(typeSyntax), new Metadata.GenericParameterDefinition() { type_name = gps.Name }); return(model.GetIndifierInfo(typeSyntax.Name).type); } return(GetType(typeSyntax.GetTypeDefinitionFullName())); }
//查找一个类型,如果是动态类型,构造一个 public Metadata.DB_Type FindType(Metadata.Expression.TypeSyntax refType, Metadata.Model model) { if (refType.IsVoid) { return(null); } Metadata.DB_Type type = Model.GetType(refType, model); if (type == null) { type = Metadata.DB.LoadType(path, refType.GetTypeDefinitionFullName()); Model.types.Add(refType.GetTypeDefinitionFullName(), type); return(Model.GetType(refType, model));; } return(type); }
static HashSet <string> GetTypeList(Metadata.Expression.TypeSyntax type) { HashSet <string> set = new HashSet <string>(); set.Add(type.GetTypeDefinitionFullName()); if (type.isGenericType) { foreach (var p in type.args) { if (p.isGenericParameter || p.IsVoid) { continue; } foreach (var l in GetTypeList(p)) { set.Add(l); } } } return(set); }
//查找一个类型,如果是动态类型,构造一个 public Metadata.DB_Type FindType(Metadata.Expression.TypeSyntax refType, Metadata.Model model) { return(Model.GetType(refType, model)); }