Skip to content

Commit 3922607

Browse files
authored
[csharp-netcore] Fixed compiler null-check warning (#5119)
* Fixed compiler null-check warning * Rename vendor extensions as `x-csharp-value-type`
1 parent 76e8e81 commit 3922607

25 files changed

Lines changed: 191 additions & 758 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,10 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
423423
postProcessEmitDefaultValue(property.vendorExtensions);
424424

425425
super.postProcessModelProperty(model, property);
426+
427+
if (!property.isContainer && (nullableType.contains(property.dataType) || property.isEnum)) {
428+
property.vendorExtensions.put("x-csharp-value-type", true);
429+
}
426430
}
427431

428432
@Override
@@ -458,8 +462,12 @@ public void postProcessParameter(CodegenParameter parameter) {
458462
postProcessEmitDefaultValue(parameter.vendorExtensions);
459463
super.postProcessParameter(parameter);
460464

461-
if (!parameter.required && nullableType.contains(parameter.dataType)) { //optional
462-
parameter.dataType = parameter.dataType + "?";
465+
if (nullableType.contains(parameter.dataType)) {
466+
if (!parameter.required) { //optional
467+
parameter.dataType = parameter.dataType + "?";
468+
} else {
469+
parameter.vendorExtensions.put("x-csharp-value-type", true);
470+
}
463471
}
464472
}
465473

modules/openapi-generator/src/main/resources/csharp-netcore/api.mustache

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,14 @@ namespace {{packageName}}.{{apiPackage}}
225225
public {{packageName}}.Client.ApiResponse<{{#returnType}} {{{returnType}}} {{/returnType}}{{^returnType}}Object{{/returnType}}> {{operationId}}WithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default({{{dataType}}}){{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
226226
{
227227
{{#allParams}}
228-
{{^isNullable}}
229228
{{#required}}
229+
{{^vendorExtensions.x-csharp-value-type}}
230230
// verify the required parameter '{{paramName}}' is set
231231
if ({{paramName}} == null)
232232
throw new {{packageName}}.Client.ApiException(400, "Missing required parameter '{{paramName}}' when calling {{classname}}->{{operationId}}");
233233

234+
{{/vendorExtensions.x-csharp-value-type}}
234235
{{/required}}
235-
{{/isNullable}}
236236
{{/allParams}}
237237
{{packageName}}.Client.RequestOptions localVarRequestOptions = new {{packageName}}.Client.RequestOptions();
238238

@@ -256,10 +256,16 @@ namespace {{packageName}}.{{apiPackage}}
256256
if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
257257

258258
{{#pathParams}}
259+
{{^vendorExtensions.x-csharp-value-type}}
259260
if ({{paramName}} != null)
260261
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter
262+
{{/vendorExtensions.x-csharp-value-type}}
263+
{{#vendorExtensions.x-csharp-value-type}}
264+
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter
265+
{{/vendorExtensions.x-csharp-value-type}}
261266
{{/pathParams}}
262267
{{#queryParams}}
268+
{{^vendorExtensions.x-csharp-value-type}}
263269
if ({{paramName}} != null)
264270
{
265271
foreach (var _kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}))
@@ -270,12 +276,28 @@ namespace {{packageName}}.{{apiPackage}}
270276
}
271277
}
272278
}
279+
{{/vendorExtensions.x-csharp-value-type}}
280+
{{#vendorExtensions.x-csharp-value-type}}
281+
foreach (var _kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}))
282+
{
283+
foreach (var _kvpValue in _kvp.Value)
284+
{
285+
localVarRequestOptions.QueryParameters.Add(_kvp.Key, _kvpValue);
286+
}
287+
}
288+
{{/vendorExtensions.x-csharp-value-type}}
273289
{{/queryParams}}
274290
{{#headerParams}}
291+
{{^vendorExtensions.x-csharp-value-type}}
275292
if ({{paramName}} != null)
276293
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter
294+
{{/vendorExtensions.x-csharp-value-type}}
295+
{{#vendorExtensions.x-csharp-value-type}}
296+
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter
297+
{{/vendorExtensions.x-csharp-value-type}}
277298
{{/headerParams}}
278299
{{#formParams}}
300+
{{^vendorExtensions.x-csharp-value-type}}
279301
if ({{paramName}} != null)
280302
{
281303
{{#isFile}}
@@ -285,6 +307,15 @@ namespace {{packageName}}.{{apiPackage}}
285307
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // form parameter
286308
{{/isFile}}
287309
}
310+
{{/vendorExtensions.x-csharp-value-type}}
311+
{{#vendorExtensions.x-csharp-value-type}}
312+
{{#isFile}}
313+
localVarRequestOptions.FileParameters.Add("{{baseName}}", {{paramName}});
314+
{{/isFile}}
315+
{{^isFile}}
316+
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // form parameter
317+
{{/isFile}}
318+
{{/vendorExtensions.x-csharp-value-type}}
288319
{{/formParams}}
289320
{{#bodyParam}}
290321
localVarRequestOptions.Data = {{paramName}};
@@ -363,14 +394,14 @@ namespace {{packageName}}.{{apiPackage}}
363394
public async System.Threading.Tasks.Task<{{packageName}}.Client.ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Object{{/returnType}}>> {{operationId}}AsyncWithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default({{{dataType}}}){{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
364395
{
365396
{{#allParams}}
366-
{{^isNullable}}
367397
{{#required}}
398+
{{^vendorExtensions.x-csharp-value-type}}
368399
// verify the required parameter '{{paramName}}' is set
369400
if ({{paramName}} == null)
370401
throw new {{packageName}}.Client.ApiException(400, "Missing required parameter '{{paramName}}' when calling {{classname}}->{{operationId}}");
371402

403+
{{/vendorExtensions.x-csharp-value-type}}
372404
{{/required}}
373-
{{/isNullable}}
374405
{{/allParams}}
375406

376407
{{packageName}}.Client.RequestOptions localVarRequestOptions = new {{packageName}}.Client.RequestOptions();
@@ -395,10 +426,16 @@ namespace {{packageName}}.{{apiPackage}}
395426
localVarRequestOptions.HeaderParameters.Add("Accept", _accept);
396427

397428
{{#pathParams}}
429+
{{^vendorExtensions.x-csharp-value-type}}
398430
if ({{paramName}} != null)
399431
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter
432+
{{/vendorExtensions.x-csharp-value-type}}
433+
{{#vendorExtensions.x-csharp-value-type}}
434+
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter
435+
{{/vendorExtensions.x-csharp-value-type}}
400436
{{/pathParams}}
401437
{{#queryParams}}
438+
{{^vendorExtensions.x-csharp-value-type}}
402439
if ({{paramName}} != null)
403440
{
404441
foreach (var _kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}))
@@ -409,12 +446,28 @@ namespace {{packageName}}.{{apiPackage}}
409446
}
410447
}
411448
}
449+
{{/vendorExtensions.x-csharp-value-type}}
450+
{{#vendorExtensions.x-csharp-value-type}}
451+
foreach (var _kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}))
452+
{
453+
foreach (var _kvpValue in _kvp.Value)
454+
{
455+
localVarRequestOptions.QueryParameters.Add(_kvp.Key, _kvpValue);
456+
}
457+
}
458+
{{/vendorExtensions.x-csharp-value-type}}
412459
{{/queryParams}}
413460
{{#headerParams}}
461+
{{^vendorExtensions.x-csharp-value-type}}
414462
if ({{paramName}} != null)
415463
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter
464+
{{/vendorExtensions.x-csharp-value-type}}
465+
{{#vendorExtensions.x-csharp-value-type}}
466+
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter
467+
{{/vendorExtensions.x-csharp-value-type}}
416468
{{/headerParams}}
417469
{{#formParams}}
470+
{{^vendorExtensions.x-csharp-value-type}}
418471
if ({{paramName}} != null)
419472
{
420473
{{#isFile}}
@@ -424,6 +477,15 @@ namespace {{packageName}}.{{apiPackage}}
424477
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // form parameter
425478
{{/isFile}}
426479
}
480+
{{/vendorExtensions.x-csharp-value-type}}
481+
{{#vendorExtensions.x-csharp-value-type}}
482+
{{#isFile}}
483+
localVarRequestOptions.FileParameters.Add("{{baseName}}", {{paramName}});
484+
{{/isFile}}
485+
{{^isFile}}
486+
localVarRequestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // form parameter
487+
{{/isFile}}
488+
{{/vendorExtensions.x-csharp-value-type}}
427489
{{/formParams}}
428490
{{#bodyParam}}
429491
localVarRequestOptions.Data = {{paramName}};

modules/openapi-generator/src/main/resources/csharp-netcore/modelGeneric.mustache

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,28 +60,15 @@
6060
{{#vars}}
6161
{{^isInherited}}
6262
{{^isReadOnly}}
63-
{{^isNullable}}
6463
{{#required}}
65-
{{^isEnum}}
64+
{{^vendorExtensions.x-csharp-value-type}}
6665
// to ensure "{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}" is required (not null)
67-
if ({{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} == null)
68-
{
69-
throw new InvalidDataException("{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} is a required property for {{classname}} and cannot be null");
70-
}
71-
else
72-
{
73-
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}};
74-
}
75-
76-
{{/isEnum}}
77-
{{#isEnum}}
66+
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} ?? throw new ArgumentNullException("{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} is a required property for {{classname}} and cannot be null");;
67+
{{/vendorExtensions.x-csharp-value-type}}
68+
{{#vendorExtensions.x-csharp-value-type}}
7869
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}};
79-
{{/isEnum}}
70+
{{/vendorExtensions.x-csharp-value-type}}
8071
{{/required}}
81-
{{/isNullable}}
82-
{{#isNullable}}
83-
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}};
84-
{{/isNullable}}
8572
{{/isReadOnly}}
8673
{{/isInherited}}
8774
{{/vars}}
@@ -90,15 +77,13 @@
9077
{{^isReadOnly}}
9178
{{^required}}
9279
{{#defaultValue}}
80+
{{^vendorExtensions.x-csharp-value-type}}
9381
// use default value if no "{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}" provided
94-
if ({{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} == null)
95-
{
96-
this.{{name}} = {{{defaultValue}}};
97-
}
98-
else
99-
{
100-
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}};
101-
}
82+
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} ?? {{{defaultValue}}};
83+
{{/vendorExtensions.x-csharp-value-type}}
84+
{{#vendorExtensions.x-csharp-value-type}}
85+
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}};
86+
{{/vendorExtensions.x-csharp-value-type}}
10287
{{/defaultValue}}
10388
{{^defaultValue}}
10489
this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}};

0 commit comments

Comments
 (0)