Added support for sub types in the C# client code generator. Bumped package version to 1.4.0
This commit is contained in:
		| @@ -17,6 +17,17 @@ namespace MontoyaTech.Rest.Net.Example | |||||||
|             public string Id; |             public string Id; | ||||||
|  |  | ||||||
|             public UserRole Role { get; set; } |             public UserRole Role { get; set; } | ||||||
|  |  | ||||||
|  |             public List<Permission> Permissions; | ||||||
|  |  | ||||||
|  |             public class Permission | ||||||
|  |             { | ||||||
|  |                 public string Name; | ||||||
|  |  | ||||||
|  |                 public Types Type; | ||||||
|  |  | ||||||
|  |                 public enum Types { Read, Write } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public class User : BaseUser |         public class User : BaseUser | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ | |||||||
|     <AssemblyName>MontoyaTech.Rest.Net</AssemblyName> |     <AssemblyName>MontoyaTech.Rest.Net</AssemblyName> | ||||||
|     <RootNamespace>MontoyaTech.Rest.Net</RootNamespace> |     <RootNamespace>MontoyaTech.Rest.Net</RootNamespace> | ||||||
|     <GenerateDocumentationFile>True</GenerateDocumentationFile> |     <GenerateDocumentationFile>True</GenerateDocumentationFile> | ||||||
|     <Version>1.3.9</Version> |     <Version>1.4.0</Version> | ||||||
|     <PackageReleaseNotes></PackageReleaseNotes> |     <PackageReleaseNotes></PackageReleaseNotes> | ||||||
|     <PackageIcon>Logo_Symbol_Black_Outline.png</PackageIcon> |     <PackageIcon>Logo_Symbol_Black_Outline.png</PackageIcon> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -160,7 +160,19 @@ namespace MontoyaTech.Rest.Net | |||||||
|         protected internal virtual void GenerateCSharpIncludedTypes(List<Type> types, CodeWriter writer) |         protected internal virtual void GenerateCSharpIncludedTypes(List<Type> types, CodeWriter writer) | ||||||
|         { |         { | ||||||
|             foreach (var type in types) |             foreach (var type in types) | ||||||
|                 this.GenerateCSharpIncludedType(type, writer); |             { | ||||||
|  |                 bool subType = false; | ||||||
|  |  | ||||||
|  |                 //See if this type belongs to another type in the list. | ||||||
|  |                 if (type.DeclaringType != null) | ||||||
|  |                     for (int i = 0; i < types.Count && !subType; i++) | ||||||
|  |                         if (type.DeclaringType == types[i]) | ||||||
|  |                             subType = true; | ||||||
|  |  | ||||||
|  |                 //If not, generate the C# for this type. | ||||||
|  |                 if (!subType) | ||||||
|  |                     this.GenerateCSharpIncludedType(type, types, writer); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         /// <summary> |         /// <summary> | ||||||
| @@ -168,7 +180,7 @@ namespace MontoyaTech.Rest.Net | |||||||
|         /// </summary> |         /// </summary> | ||||||
|         /// <param name="type"></param> |         /// <param name="type"></param> | ||||||
|         /// <param name="writer"></param> |         /// <param name="writer"></param> | ||||||
|         protected internal virtual void GenerateCSharpIncludedType(Type type, CodeWriter writer) |         protected internal virtual void GenerateCSharpIncludedType(Type type, List<Type> types, CodeWriter writer) | ||||||
|         { |         { | ||||||
|             writer.WriteBreak(); |             writer.WriteBreak(); | ||||||
|  |  | ||||||
| @@ -200,6 +212,11 @@ namespace MontoyaTech.Rest.Net | |||||||
|                     if (!property.IsSpecialName && property.GetSetMethod() != null && property.GetGetMethod() != null) |                     if (!property.IsSpecialName && property.GetSetMethod() != null && property.GetGetMethod() != null) | ||||||
|                         this.GenerateCSharpIncludedProperty(property, writer); |                         this.GenerateCSharpIncludedProperty(property, writer); | ||||||
|  |  | ||||||
|  |             //Generate C# for any types that belong to this one. | ||||||
|  |             for (int i = 0; i < types.Count; i++) | ||||||
|  |                 if (types[i].DeclaringType == type) | ||||||
|  |                     GenerateCSharpIncludedType(types[i], types, writer); | ||||||
|  |  | ||||||
|             writer.Outdent().WriteLine("}"); |             writer.Outdent().WriteLine("}"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -44,6 +44,20 @@ namespace MontoyaTech.Rest.Net | |||||||
|         { |         { | ||||||
|             var dependencies = new HashSet<Type>(); |             var dependencies = new HashSet<Type>(); | ||||||
|  |  | ||||||
|  |             var arguments = type.GetGenericArguments(); | ||||||
|  |  | ||||||
|  |             if (arguments != null) | ||||||
|  |             { | ||||||
|  |                 foreach (var argument in arguments) | ||||||
|  |                 { | ||||||
|  |                     var types = this.FindTypeDependencies(argument); | ||||||
|  |  | ||||||
|  |                     for (int i = 0; i < types.Count; i++) | ||||||
|  |                         if (!dependencies.Contains(types[i])) | ||||||
|  |                             dependencies.Add(types[i]); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|             if (this.IsTypeDotNet(type)) |             if (this.IsTypeDotNet(type)) | ||||||
|                 return dependencies.ToList(); |                 return dependencies.ToList(); | ||||||
|  |  | ||||||
| @@ -60,20 +74,6 @@ namespace MontoyaTech.Rest.Net | |||||||
|                         dependencies.Add(types[i]); |                         dependencies.Add(types[i]); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             var arguments = type.GetGenericArguments(); |  | ||||||
|  |  | ||||||
|             if (arguments != null) |  | ||||||
|             { |  | ||||||
|                 foreach (var argument in arguments) |  | ||||||
|                 { |  | ||||||
|                     var types = this.FindTypeDependencies(argument); |  | ||||||
|  |  | ||||||
|                     for (int i = 0; i < types.Count; i++) |  | ||||||
|                         if (!dependencies.Contains(types[i])) |  | ||||||
|                             dependencies.Add(types[i]); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             var fields = type.GetFields(); |             var fields = type.GetFields(); | ||||||
|  |  | ||||||
|             if (fields != null) |             if (fields != null) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user