/// <summary> /// Reads metadata from the type. /// </summary> /// <param name="type">The type.</param> public static UserTypeMetadata[] ReadFromType(Type type) { UserTypeAttribute[] attributes = type.GetCustomAttributes <UserTypeAttribute>(false).ToArray(); bool derivedFromUserType = IsDerivedFrom(type, typeof(UserType)); /* #fixme temp workaround for genertic types * if (type.IsGenericType) * { * foreach(Type genericArgument in type.GetGenericArguments()) * { * UserTypeAttribute genericAttribute = genericArgument.GetCustomAttribute<UserTypeAttribute>(); * if (genericAttribute != null) * { * string moduleName = genericAttribute.ModuleName; * // #fixme temp workaround * string typeName = type.Name + "<>"; * * return new UserTypeMetadata(moduleName, typeName, type); * } * } * } */ if (attributes.Length > 0 && !derivedFromUserType) { throw new Exception(string.Format("Type {0} has defined UserTypeAttribute, but it does not inherit UserType", type.FullName)); } else if (derivedFromUserType) { UserTypeMetadata[] metadata = new UserTypeMetadata[attributes.Length]; for (int i = 0; i < metadata.Length; i++) { UserTypeAttribute attribute = attributes[i]; string moduleName = attribute != null ? attribute.ModuleName : null; string typeName = attribute != null ? attribute.TypeName : !type.IsGenericType ? type.Name : type.Name.Substring(0, type.Name.IndexOf('`')) + "<>"; // TODO: Form better name for generics type metadata[i] = new UserTypeMetadata(moduleName, typeName, type); } return(metadata); } return(new UserTypeMetadata[0]); }
/// <summary> /// Reads metadata from the type. /// </summary> /// <param name="type">The type.</param> public static UserTypeMetadata[] ReadFromType(Type type) { UserTypeAttribute[] attributes = type.GetCustomAttributes<UserTypeAttribute>(false).ToArray(); bool derivedFromUserType = IsDerivedFrom(type, typeof(UserType)); /* #fixme temp workaround for genertic types if (type.IsGenericType) { foreach(Type genericArgument in type.GetGenericArguments()) { UserTypeAttribute genericAttribute = genericArgument.GetCustomAttribute<UserTypeAttribute>(); if (genericAttribute != null) { string moduleName = genericAttribute.ModuleName; // #fixme temp workaround string typeName = type.Name + "<>"; return new UserTypeMetadata(moduleName, typeName, type); } } } */ if (attributes.Length > 0 && !derivedFromUserType) { throw new Exception(string.Format("Type {0} has defined UserTypeAttribute, but it does not inherit UserType", type.FullName)); } else if (derivedFromUserType) { UserTypeMetadata[] metadata = new UserTypeMetadata[attributes.Length]; for (int i = 0; i < metadata.Length; i++) { UserTypeAttribute attribute = attributes[i]; string moduleName = attribute != null ? attribute.ModuleName : null; string typeName = attribute != null ? attribute.TypeName : !type.IsGenericType ? type.Name : type.Name.Substring(0, type.Name.IndexOf('`')) + "<>"; // TODO: Form better name for generics type metadata[i] = new UserTypeMetadata(moduleName, typeName, type); } return metadata; } return new UserTypeMetadata[0]; }