/// <summary> /// Creates a TypeSpecifier for a given type. /// </summary> /// <param name="type">Type to create a TypeSpecifier for.</param> /// <returns>TypeSpecifier for the given type.</returns> public static TypeSpecifier FromType(Type type) { if (type.IsGenericParameter) { throw new ArgumentException(nameof(type)); } string typeName = type.Name.Split('`').First(); if (!string.IsNullOrEmpty(type.Namespace)) { typeName = type.Namespace + "." + typeName; } TypeSpecifier typeSpecifier = new TypeSpecifier(typeName, type.IsSubclassOf(typeof(Enum)), type.IsInterface); foreach (Type genType in type.GetGenericArguments()) { if (genType.IsGenericParameter) { // TODO: Convert and add constraints typeSpecifier.GenericArguments.Add(GenericType.FromType(genType)); } else { typeSpecifier.GenericArguments.Add(TypeSpecifier.FromType(genType)); } } return(typeSpecifier); }
/// <summary> /// Creates a TypeSpecifier for a given type. /// </summary> /// <param name="type">Type to create a TypeSpecifier for.</param> /// <returns>TypeSpecifier for the given type.</returns> public static TypeSpecifier FromType(Type type) { if (type.IsGenericParameter) { throw new ArgumentException(nameof(type)); } var typeSpecifier = new TypeSpecifier ( TypeName(type), type.IsSubclassOf(typeof(Enum)), type.IsInterface, typeof(Delegate).IsAssignableFrom(type) ); foreach (Type genType in type.GetGenericArguments()) { if (genType.IsGenericParameter) { // TODO: Convert and add constraints typeSpecifier.GenericArguments.Add(GenericType.FromType(genType)); } else { typeSpecifier.GenericArguments.Add(TypeSpecifier.FromType(genType)); } } return(typeSpecifier); }