faster logic to patch parameters (#16102)

This commit is contained in:
devhl-labs 2023-07-16 07:30:17 -04:00 committed by GitHub
parent 598c27ddb0
commit 6299af176d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 66 additions and 50 deletions

View File

@ -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<CodegenParameter> 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<ModelMap> 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<ModelMap> 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;

View File

@ -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<MultipartMixedStatus>(); // List<MultipartMixedStatus> | (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&lt;MultipartMixedStatus&gt;**](MultipartMixedStatus.md) | | [optional] |

View File

@ -480,6 +480,12 @@ namespace Org.OpenAPITools.Api
/// <returns>ApiResponse of Object(void)</returns>
public Org.OpenAPITools.Client.ApiResponse<Object> MultipartMixedWithHttpInfo(MultipartMixedStatus status, System.IO.Stream file, MultipartMixedRequestMarker marker = default(MultipartMixedRequestMarker), List<MultipartMixedStatus> statusArray = default(List<MultipartMixedStatus>), 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
/// <returns>Task of ApiResponse</returns>
public async System.Threading.Tasks.Task<Org.OpenAPITools.Client.ApiResponse<Object>> MultipartMixedWithHttpInfoAsync(MultipartMixedStatus status, System.IO.Stream file, MultipartMixedRequestMarker marker = default(MultipartMixedRequestMarker), List<MultipartMixedStatus> statusArray = default(List<MultipartMixedStatus>), 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)
{