diff --git a/AutoRest/Generators/CSharp/Azure.CSharp/AzureCSharpCodeGenerator.cs b/AutoRest/Generators/CSharp/Azure.CSharp/AzureCSharpCodeGenerator.cs index 5c7f0b5bb3..85f9fe326a 100644 --- a/AutoRest/Generators/CSharp/Azure.CSharp/AzureCSharpCodeGenerator.cs +++ b/AutoRest/Generators/CSharp/Azure.CSharp/AzureCSharpCodeGenerator.cs @@ -99,7 +99,7 @@ public override async Task Generate(ServiceClient serviceClient) { var extensionsTemplate = new ExtensionsTemplate { - Model = new AzureExtensionsTemplateModel(serviceClient, null), + Model = new AzureExtensionsTemplateModel(serviceClient, null, SyncWrappers), }; await Write(extensionsTemplate, serviceClient.Name + "Extensions.cs"); } @@ -124,7 +124,7 @@ public override async Task Generate(ServiceClient serviceClient) // Service client extensions var operationExtensionsTemplate = new ExtensionsTemplate { - Model = new AzureExtensionsTemplateModel(serviceClient, group), + Model = new AzureExtensionsTemplateModel(serviceClient, group, SyncWrappers), }; await Write(operationExtensionsTemplate, operationExtensionsTemplate.Model.ExtensionName + "Extensions.cs"); diff --git a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureExtensionsTemplateModel.cs b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureExtensionsTemplateModel.cs index 61dcf09a9f..8dcb1228f5 100644 --- a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureExtensionsTemplateModel.cs +++ b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureExtensionsTemplateModel.cs @@ -12,12 +12,12 @@ namespace Microsoft.Rest.Generator.CSharp.Azure { public class AzureExtensionsTemplateModel : ExtensionsTemplateModel { - public AzureExtensionsTemplateModel(ServiceClient serviceClient, string operationName) - : base(serviceClient, operationName) + public AzureExtensionsTemplateModel(ServiceClient serviceClient, string operationName, SyncWrapperGenerationMode syncWrappers) + : base(serviceClient, operationName, syncWrappers) { MethodTemplateModels.Clear(); Methods.Where(m => m.Group == operationName) - .ForEach(m => MethodTemplateModels.Add(new AzureMethodTemplateModel(m, serviceClient))); + .ForEach(m => MethodTemplateModels.Add(new AzureMethodTemplateModel(m, serviceClient, syncWrappers))); if (ExtensionName != Name) { ExtensionName = ExtensionName + "Operations"; diff --git a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodGroupTemplateModel.cs b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodGroupTemplateModel.cs index 62f94ccf92..ecadbc1708 100644 --- a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodGroupTemplateModel.cs +++ b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodGroupTemplateModel.cs @@ -20,7 +20,7 @@ public AzureMethodGroupTemplateModel(ServiceClient serviceClient, string methodG // AzureMethodTemplateModel MethodTemplateModels.Clear(); Methods.Where(m => m.Group == methodGroupName) - .ForEach(m => MethodTemplateModels.Add(new AzureMethodTemplateModel(m, serviceClient))); + .ForEach(m => MethodTemplateModels.Add(new AzureMethodTemplateModel(m, serviceClient, SyncWrapperGenerationMode.None))); } /// diff --git a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodTemplateModel.cs b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodTemplateModel.cs index 1a2b58cc1a..e393a7d502 100644 --- a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodTemplateModel.cs +++ b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureMethodTemplateModel.cs @@ -15,8 +15,8 @@ namespace Microsoft.Rest.Generator.CSharp.Azure { public class AzureMethodTemplateModel : MethodTemplateModel { - public AzureMethodTemplateModel(Method source, ServiceClient serviceClient) - : base(source, serviceClient) + public AzureMethodTemplateModel(Method source, ServiceClient serviceClient, SyncWrapperGenerationMode syncWrappers) + : base(source, serviceClient, syncWrappers) { if (source == null) { @@ -54,7 +54,7 @@ public AzureMethodTemplateModel GetMethod Resources.InvalidLongRunningOperationForCreateOrUpdate, Name, Group)); } - return new AzureMethodTemplateModel(getMethod, ServiceClient); + return new AzureMethodTemplateModel(getMethod, ServiceClient, SyncWrappers); } } diff --git a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureServiceClientTemplateModel.cs b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureServiceClientTemplateModel.cs index 6a01deec30..a790ba0367 100644 --- a/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureServiceClientTemplateModel.cs +++ b/AutoRest/Generators/CSharp/Azure.CSharp/TemplateModels/AzureServiceClientTemplateModel.cs @@ -18,7 +18,7 @@ public AzureServiceClientTemplateModel(ServiceClient serviceClient, bool interna // TODO: Initialized in the base constructor. Why Clear it? MethodTemplateModels.Clear(); Methods.Where(m => m.Group == null) - .ForEach(m => MethodTemplateModels.Add(new AzureMethodTemplateModel(m, serviceClient))); + .ForEach(m => MethodTemplateModels.Add(new AzureMethodTemplateModel(m, serviceClient, SyncWrapperGenerationMode.None))); } /// diff --git a/AutoRest/Generators/CSharp/CSharp/CSharpCodeGenerator.cs b/AutoRest/Generators/CSharp/CSharp/CSharpCodeGenerator.cs index b43de08e36..8655910279 100644 --- a/AutoRest/Generators/CSharp/CSharp/CSharpCodeGenerator.cs +++ b/AutoRest/Generators/CSharp/CSharp/CSharpCodeGenerator.cs @@ -29,6 +29,12 @@ public CSharpCodeGenerator(Settings settings) : base(settings) [SettingsAlias("internal")] public bool InternalConstructors { get; set; } + /// + /// Specifies mode for generating sync wrappers. + /// + [SettingsInfo("Specifies mode for generating sync wrappers.")] + public SyncWrapperGenerationMode SyncWrappers { get; set; } + public override string Name { get { return "CSharp"; } @@ -106,7 +112,7 @@ public override async Task Generate(ServiceClient serviceClient) { var extensionsTemplate = new ExtensionsTemplate { - Model = new ExtensionsTemplateModel(serviceClient, null), + Model = new ExtensionsTemplateModel(serviceClient, null, SyncWrappers), }; await Write(extensionsTemplate, serviceClient.Name + "Extensions.cs"); } @@ -131,7 +137,7 @@ public override async Task Generate(ServiceClient serviceClient) // Service client extensions var operationExtensionsTemplate = new ExtensionsTemplate { - Model = new ExtensionsTemplateModel(serviceClient, group), + Model = new ExtensionsTemplateModel(serviceClient, group, SyncWrappers), }; await Write(operationExtensionsTemplate, group + "Extensions.cs"); diff --git a/AutoRest/Generators/CSharp/CSharp/SyncWrapperGenerationMode.cs b/AutoRest/Generators/CSharp/CSharp/SyncWrapperGenerationMode.cs index a5112f2b2e..72e4088bb8 100644 --- a/AutoRest/Generators/CSharp/CSharp/SyncWrapperGenerationMode.cs +++ b/AutoRest/Generators/CSharp/CSharp/SyncWrapperGenerationMode.cs @@ -9,8 +9,8 @@ namespace Microsoft.Rest.Generator.CSharp /// public enum SyncWrapperGenerationMode { - All = 0, - Essential = 1, - None = 2 + Essential, + All, + None } } diff --git a/AutoRest/Generators/CSharp/CSharp/TemplateModels/ExtensionsTemplateModel.cs b/AutoRest/Generators/CSharp/CSharp/TemplateModels/ExtensionsTemplateModel.cs index a6b969b363..287311fe27 100644 --- a/AutoRest/Generators/CSharp/CSharp/TemplateModels/ExtensionsTemplateModel.cs +++ b/AutoRest/Generators/CSharp/CSharp/TemplateModels/ExtensionsTemplateModel.cs @@ -10,13 +10,13 @@ namespace Microsoft.Rest.Generator.CSharp { public class ExtensionsTemplateModel : ServiceClient { - public ExtensionsTemplateModel(ServiceClient serviceClient, string operationName) + public ExtensionsTemplateModel(ServiceClient serviceClient, string operationName, SyncWrapperGenerationMode syncWrappers) { this.LoadFrom(serviceClient); MethodTemplateModels = new List(); ExtensionName = operationName ?? this.Name; this.Methods.Where(m => m.Group == operationName) - .ForEach(m => MethodTemplateModels.Add(new MethodTemplateModel(m, serviceClient))); + .ForEach(m => MethodTemplateModels.Add(new MethodTemplateModel(m, serviceClient, syncWrappers))); } diff --git a/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodGroupTemplateModel.cs b/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodGroupTemplateModel.cs index 3a12b4da9a..9c4c3ebcc3 100644 --- a/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodGroupTemplateModel.cs +++ b/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodGroupTemplateModel.cs @@ -19,7 +19,7 @@ public MethodGroupTemplateModel(ServiceClient serviceClient, string methodGroupN MethodGroupName = methodGroupName; MethodGroupType = methodGroupName; Methods.Where(m => m.Group == MethodGroupName) - .ForEach(m => MethodTemplateModels.Add(new MethodTemplateModel(m, serviceClient))); + .ForEach(m => MethodTemplateModels.Add(new MethodTemplateModel(m, serviceClient, SyncWrapperGenerationMode.None))); } public List MethodTemplateModels { get; private set; } diff --git a/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs b/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs index c27bb73925..a5bfcd56b3 100644 --- a/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs +++ b/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs @@ -14,9 +14,10 @@ namespace Microsoft.Rest.Generator.CSharp { public class MethodTemplateModel : Method { - public MethodTemplateModel(Method source, ServiceClient serviceClient) + public MethodTemplateModel(Method source, ServiceClient serviceClient, SyncWrapperGenerationMode syncWrappers) { this.LoadFrom(source); + SyncWrappers = syncWrappers; ParameterTemplateModels = new List(); LogicalParameterTemplateModels = new List(); source.Parameters.ForEach(p => ParameterTemplateModels.Add(new ParameterTemplateModel(p))); @@ -30,6 +31,8 @@ public MethodTemplateModel(Method source, ServiceClient serviceClient) public bool IsCustomBaseUri { get; private set; } + public SyncWrapperGenerationMode SyncWrappers { get; private set; } + public ServiceClient ServiceClient { get; set; } public List ParameterTemplateModels { get; private set; } diff --git a/AutoRest/Generators/CSharp/CSharp/TemplateModels/ServiceClientTemplateModel.cs b/AutoRest/Generators/CSharp/CSharp/TemplateModels/ServiceClientTemplateModel.cs index f8c2d1174d..b38f1db38b 100644 --- a/AutoRest/Generators/CSharp/CSharp/TemplateModels/ServiceClientTemplateModel.cs +++ b/AutoRest/Generators/CSharp/CSharp/TemplateModels/ServiceClientTemplateModel.cs @@ -16,7 +16,7 @@ public ServiceClientTemplateModel(ServiceClient serviceClient, bool internalCons this.LoadFrom(serviceClient); MethodTemplateModels = new List(); Methods.Where(m => m.Group == null) - .ForEach(m => MethodTemplateModels.Add(new MethodTemplateModel(m, serviceClient))); + .ForEach(m => MethodTemplateModels.Add(new MethodTemplateModel(m, serviceClient, SyncWrapperGenerationMode.None))); ConstructorVisibility = internalConstructors ? "internal" : "public"; this.IsCustomBaseUri = serviceClient.Extensions.ContainsKey(Microsoft.Rest.Generator.Extensions.ParameterizedHostExtension); } diff --git a/AutoRest/Generators/CSharp/CSharp/Templates/ExtensionMethodTemplate.cshtml b/AutoRest/Generators/CSharp/CSharp/Templates/ExtensionMethodTemplate.cshtml index c831d5619b..d2531c48e3 100644 --- a/AutoRest/Generators/CSharp/CSharp/Templates/ExtensionMethodTemplate.cshtml +++ b/AutoRest/Generators/CSharp/CSharp/Templates/ExtensionMethodTemplate.cshtml @@ -6,25 +6,27 @@ @using Microsoft.Rest.Generator.Utilities @inherits Microsoft.Rest.Generator.Template @{ -@if (!String.IsNullOrEmpty(Model.Description) || !String.IsNullOrEmpty(Model.Summary)) +if (Model.SyncWrappers == SyncWrapperGenerationMode.All || Model.SyncWrappers == SyncWrapperGenerationMode.Essential) { + if (!String.IsNullOrEmpty(Model.Description) || !String.IsNullOrEmpty(Model.Summary)) + { @:/// @:@WrapComment("/// ", String.IsNullOrEmpty(Model.Summary) ? Model.Description.EscapeXmlComment() : Model.Summary.EscapeXmlComment()) @:/// -} -@if (!String.IsNullOrEmpty(Model.Description) && !String.IsNullOrEmpty(Model.Summary)) -{ + } + if (!String.IsNullOrEmpty(Model.Description) && !String.IsNullOrEmpty(Model.Summary)) + { @:@WrapComment("/// ", Model.Description.EscapeXmlComment()) -} + } @:/// @:/// The operations group for this extension method. @:/// -foreach (var parameter in Model.LocalParameters) -{ + foreach (var parameter in Model.LocalParameters) + { @:/// @:@WrapComment("/// ", parameter.Documentation.EscapeXmlComment()) @:/// -} + } @:public static @Model.ReturnTypeString @(Model.Name)(@Model.GetExtensionParameters(Model.SyncMethodParameterDeclaration)) @:{ if (Model.ReturnType.Body != null) @@ -40,15 +42,16 @@ foreach (var parameter in Model.LocalParameters) @:Task.Factory.StartNew(s => ((I@(Model.MethodGroupName))s).@(Model.Name)Async(@(Model.SyncMethodInvocationArgs)), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); } @:} - @EmptyLine -@if (!String.IsNullOrEmpty(Model.Description) || !String.IsNullOrEmpty(Model.Summary)) +} + +if (!String.IsNullOrEmpty(Model.Description) || !String.IsNullOrEmpty(Model.Summary)) { @:/// @:@WrapComment("/// ", String.IsNullOrEmpty(Model.Summary) ? Model.Description.EscapeXmlComment() : Model.Summary.EscapeXmlComment()) @:/// } -@if (!String.IsNullOrEmpty(Model.Description) && !String.IsNullOrEmpty(Model.Summary)) +if (!String.IsNullOrEmpty(Model.Description) && !String.IsNullOrEmpty(Model.Summary)) { @:@WrapComment("/// ", Model.Description.EscapeXmlComment()) } @@ -95,26 +98,28 @@ foreach (var parameter in Model.LocalParameters) } @:} -@EmptyLine -@if (!String.IsNullOrEmpty(Model.Description) || !String.IsNullOrEmpty(Model.Summary)) +if (Model.SyncWrappers == SyncWrapperGenerationMode.All) { +@EmptyLine + if (!String.IsNullOrEmpty(Model.Description) || !String.IsNullOrEmpty(Model.Summary)) + { @:/// @:@WrapComment("/// ", String.IsNullOrEmpty(Model.Summary) ? Model.Description.EscapeXmlComment() : Model.Summary.EscapeXmlComment()) @:/// -} -@if (!String.IsNullOrEmpty(Model.Description) && !String.IsNullOrEmpty(Model.Summary)) -{ + } + if (!String.IsNullOrEmpty(Model.Description) && !String.IsNullOrEmpty(Model.Summary)) + { @:@WrapComment("/// ", Model.Description.EscapeXmlComment()) -} + } @:/// @:/// The operations group for this extension method. @:/// -foreach (var parameter in Model.LocalParameters) -{ + foreach (var parameter in Model.LocalParameters) + { @:/// @:@WrapComment("/// ", parameter.Documentation.EscapeXmlComment()) @:/// -} + } @:/// @:/// Headers that will be added to request. @:/// @@ -123,4 +128,5 @@ foreach (var parameter in Model.LocalParameters) @: return operations.@(Model.Name)WithHttpMessagesAsync(@(Model.GetAsyncMethodInvocationArgs("customHeaders", "CancellationToken.None"))).ConfigureAwait(false).GetAwaiter().GetResult(); @:} @: -} + } +} \ No newline at end of file