Exemplo n.º 1
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]);
        }
Exemplo n.º 2
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];
        }