From 6299af176d3720bd4d58580b1a4090ce8c750483 Mon Sep 17 00:00:00 2001 From: devhl-labs Date: Sun, 16 Jul 2023 07:30:17 -0400 Subject: [PATCH] faster logic to patch parameters (#16102) --- .../languages/AbstractCSharpCodegen.java | 98 ++++++++++--------- .../csharp-complex-files/docs/MultipartApi.md | 4 +- .../src/Org.OpenAPITools/Api/MultipartApi.cs | 14 ++- 3 files changed, 66 insertions(+), 50 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java index a364d2cec72..c7246cd34ac 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java @@ -777,52 +777,59 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co } } - for (ModelMap modelHashMap : allModels) { - CodegenModel codegenModel = modelHashMap.getModel(); + for (CodegenParameter parameter : operation.allParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.allParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.bodyParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.bodyParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.cookieParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.cookieParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.formParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.formParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.headerParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.headerParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.implicitHeadersParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.implicitHeadersParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.optionalParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.optionalParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.pathParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.pathParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.queryParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.queryParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.notNullableParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); + } - for (CodegenParameter parameter : operation.notNullableParams) { - patchParameter(parameter, allModels); - } - - for (CodegenParameter parameter : operation.requiredParams) { - patchParameter(parameter, allModels); - } + for (CodegenParameter parameter : operation.requiredParams) { + CodegenModel model = getModelFromParameter(allModels, parameter); + patchParameter(model, parameter); } List referenceTypes = operation.allParams.stream().filter(p -> p.vendorExtensions.get("x-is-value-type") == null && !p.isNullable).collect(Collectors.toList()); @@ -842,6 +849,13 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co } } + /** Returns the model related to the given parameter */ + private CodegenModel getModelFromParameter(List allModels, CodegenParameter parameter) { + return parameter.isModel + ? allModels.stream().map(m -> m.getModel()).filter(m -> m.getClassname().equals(parameter.dataType)).findFirst().orElse(null) + : null; + } + /** This is the same as patchVendorExtensionNullableValueType except it uses the deprecated getNullableTypes property */ protected void patchVendorExtensionNullableValueTypeLegacy(CodegenParameter parameter) { if (parameter.isNullable && !parameter.isContainer && (this.getNullableTypes().contains(parameter.dataType) || parameter.isEnum)) { @@ -849,23 +863,13 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co } } - private void patchParameter(CodegenParameter parameter, List allModels) { + private void patchParameter(CodegenModel model, CodegenParameter parameter) { patchVendorExtensionNullableValueType(parameter); if (this.getNullableReferencesTypes() || (parameter.vendorExtensions.get("x-nullable-value-type") != null)) { parameter.vendorExtensions.put("x-nullable-type", true); } - - CodegenModel model = null; - for (ModelMap modelHashMap : allModels) { - CodegenModel codegenModel = modelHashMap.getModel(); - if (codegenModel.getClassname().equals(parameter.dataType)) { - model = codegenModel; - break; - } - } - if (!isSupportNullable()) { if (model == null) { parameter.isNullable = true; diff --git a/samples/client/others/csharp-complex-files/docs/MultipartApi.md b/samples/client/others/csharp-complex-files/docs/MultipartApi.md index 23628f52603..82423a6011a 100644 --- a/samples/client/others/csharp-complex-files/docs/MultipartApi.md +++ b/samples/client/others/csharp-complex-files/docs/MultipartApi.md @@ -118,7 +118,7 @@ namespace Example Configuration config = new Configuration(); config.BasePath = "http://localhost"; var apiInstance = new MultipartApi(config); - var status = (MultipartMixedStatus) "ALLOWED"; // MultipartMixedStatus | + var status = new MultipartMixedStatus(); // MultipartMixedStatus | var file = new System.IO.MemoryStream(System.IO.File.ReadAllBytes("/path/to/file.txt")); // System.IO.Stream | a file var marker = new MultipartMixedRequestMarker(); // MultipartMixedRequestMarker | (optional) var statusArray = new List(); // List | (optional) @@ -158,7 +158,7 @@ catch (ApiException e) | Name | Type | Description | Notes | |------|------|-------------|-------| -| **status** | **MultipartMixedStatus** | | | +| **status** | [**MultipartMixedStatus**](MultipartMixedStatus.md) | | | | **file** | **System.IO.Stream****System.IO.Stream** | a file | | | **marker** | [**MultipartMixedRequestMarker**](MultipartMixedRequestMarker.md) | | [optional] | | **statusArray** | [**List<MultipartMixedStatus>**](MultipartMixedStatus.md) | | [optional] | diff --git a/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Api/MultipartApi.cs b/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Api/MultipartApi.cs index 029274a3f70..b165faa5bd0 100644 --- a/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Api/MultipartApi.cs +++ b/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Api/MultipartApi.cs @@ -480,6 +480,12 @@ namespace Org.OpenAPITools.Api /// ApiResponse of Object(void) public Org.OpenAPITools.Client.ApiResponse MultipartMixedWithHttpInfo(MultipartMixedStatus status, System.IO.Stream file, MultipartMixedRequestMarker marker = default(MultipartMixedRequestMarker), List statusArray = default(List), int operationIndex = 0) { + // verify the required parameter 'status' is set + if (status == null) + { + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'status' when calling MultipartApi->MultipartMixed"); + } + // verify the required parameter 'file' is set if (file == null) { @@ -508,7 +514,7 @@ namespace Org.OpenAPITools.Api localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); } - localVarRequestOptions.FormParameters.Add("status", Org.OpenAPITools.Client.ClientUtils.ParameterToString(status)); // form parameter + localVarRequestOptions.FormParameters.Add("status", Org.OpenAPITools.Client.ClientUtils.Serialize(status)); // form parameter if (marker != null) { localVarRequestOptions.FormParameters.Add("marker", Org.OpenAPITools.Client.ClientUtils.ParameterToString(marker)); // form parameter @@ -566,6 +572,12 @@ namespace Org.OpenAPITools.Api /// Task of ApiResponse public async System.Threading.Tasks.Task> MultipartMixedWithHttpInfoAsync(MultipartMixedStatus status, System.IO.Stream file, MultipartMixedRequestMarker marker = default(MultipartMixedRequestMarker), List statusArray = default(List), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { + // verify the required parameter 'status' is set + if (status == null) + { + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'status' when calling MultipartApi->MultipartMixed"); + } + // verify the required parameter 'file' is set if (file == null) {