Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[csharp] Fix property names #13681

Merged
merged 8 commits into from
May 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -492,14 +492,6 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
public ModelsMap postProcessModels(ModelsMap objs) {
for (ModelMap mo : objs.getModels()) {
CodegenModel cm = mo.getModel();
for (CodegenProperty var : cm.vars) {
// check to see if model name is same as the property name
// which will result in compilation error
// if found, prepend with _ to workaround the limitation
if (var.name.equalsIgnoreCase(cm.classname)) {
var.name = "_" + var.name;
}
}
wing328 marked this conversation as resolved.
Show resolved Hide resolved

if (cm.isEnum && !cm.vendorExtensions.containsKey(this.zeroBasedEnumVendorExtension)) {
if (Boolean.TRUE.equals(this.zeroBasedEnums)) {
Expand Down Expand Up @@ -568,6 +560,17 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
}

private void patchProperty(CodegenModel model, CodegenProperty property) {
String tmpPropertyName = escapeReservedWord(model, property.name);
if (property.name != tmpPropertyName) {
// the casing will be wrong if we just set the name to escapeReservedWord
// if we try to fix it with camelize, underscores get stripped out
// so test if the name was escaped and then replace var with Var
property.name = tmpPropertyName;
String firstCharacter = property.name.substring(0, 1);
property.name = property.name.substring(1);
property.name = firstCharacter.toUpperCase(Locale.ROOT) + property.name;
}

/**
* Hotfix for this issue
* https://github.com/OpenAPITools/openapi-generator/issues/12155
Expand Down Expand Up @@ -915,6 +918,54 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
}
}

for (ModelMap modelHashMap : allModels) {
CodegenModel codegenModel = modelHashMap.getModel();

for (CodegenParameter parameter : operation.allParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.bodyParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.cookieParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.formParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.headerParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.implicitHeadersParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.optionalParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.pathParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.queryParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.requiredAndNotNullableParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}

for (CodegenParameter parameter : operation.requiredParams) {
parameter.paramName = escapeReservedWord(parameter.paramName);
}
}

if (!isSupportNullable()) {
for (CodegenParameter parameter : operation.allParams) {
CodegenModel model = null;
Expand Down Expand Up @@ -1070,20 +1121,27 @@ public String toParamName(String name) {
// pet_id => petId
name = camelize(name, LOWERCASE_FIRST_LETTER);

// for reserved word or word starting with number, append _
if (isReservedWord(name) || name.matches("^\\d.*")) {
name = escapeReservedWord(name);
}

return name;
}

public String escapeReservedWord(CodegenModel model, String name) {
name = this.escapeReservedWord(name);

return name.equalsIgnoreCase(model.getClassname())
? "var" + camelize(name)
: name;
}

@Override
public String escapeReservedWord(String name) {
if (this.reservedWordsMappings().containsKey(name)) {
return this.reservedWordsMappings().get(name);
if (reservedWords().contains(name) ||
reservedWords().contains(name.toLowerCase(Locale.ROOT)) ||
reservedWords().contains(camelize(sanitizeName(name))) ||
isReservedWord(name) ||
name.matches("^\\d.*")) {
name = "var" + camelize(name);
}
return "_" + name;
return name;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -598,15 +598,6 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
postProcessPattern(property.pattern, property.vendorExtensions);
postProcessEmitDefaultValue(property.vendorExtensions);

// remove once https://github.com/OpenAPITools/openapi-generator/pull/13681 is merged
if (GENERICHOST.equals(getLibrary())) {
// all c# libraries should want this, but avoid breaking changes for now
// a class cannot contain a property with the same name
if (property.name.equals(model.classname)) {
property.name = property.name + "Property";
}
}

super.postProcessModelProperty(model, property);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Model for testing model with \"_class\" property

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Class** | **string** | | [optional]
**VarClass** | **string** | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,7 @@ No authorization required

<a id="testendpointparameters"></a>
# **TestEndpointParameters**
> void TestEndpointParameters (decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = null, int? int32 = null, long? int64 = null, float? _float = null, string _string = null, System.IO.Stream binary = null, DateTime? date = null, DateTime? dateTime = null, string password = null, string callback = null)
> void TestEndpointParameters (decimal number, double varDouble, string patternWithoutDelimiter, byte[] varByte, int? integer = null, int? int32 = null, long? int64 = null, float? varFloat = null, string varString = null, System.IO.Stream binary = null, DateTime? date = null, DateTime? dateTime = null, string password = null, string callback = null)

Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트

Expand Down Expand Up @@ -837,14 +837,14 @@ namespace Example

var apiInstance = new FakeApi(config);
var number = 8.14D; // decimal | None
var _double = 1.2D; // double | None
var varDouble = 1.2D; // double | None
var patternWithoutDelimiter = "patternWithoutDelimiter_example"; // string | None
var _byte = System.Text.Encoding.ASCII.GetBytes("BYTE_ARRAY_DATA_HERE"); // byte[] | None
var varByte = System.Text.Encoding.ASCII.GetBytes("BYTE_ARRAY_DATA_HERE"); // byte[] | None
var integer = 56; // int? | None (optional)
var int32 = 56; // int? | None (optional)
var int64 = 789L; // long? | None (optional)
var _float = 3.4F; // float? | None (optional)
var _string = "_string_example"; // string | None (optional)
var varFloat = 3.4F; // float? | None (optional)
var varString = "string_example"; // string | None (optional)
var binary = new System.IO.MemoryStream(System.IO.File.ReadAllBytes("/path/to/file.txt")); // System.IO.Stream | None (optional)
var date = DateTime.Parse("2013-10-20"); // DateTime? | None (optional)
var dateTime = DateTime.Parse(""2010-02-01T10:20:10.111110+01:00""); // DateTime? | None (optional) (default to "2010-02-01T10:20:10.111110+01:00")
Expand All @@ -854,7 +854,7 @@ namespace Example
try
{
// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
apiInstance.TestEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback);
apiInstance.TestEndpointParameters(number, varDouble, patternWithoutDelimiter, varByte, integer, int32, int64, varFloat, varString, binary, date, dateTime, password, callback);
}
catch (ApiException e)
{
Expand All @@ -874,7 +874,7 @@ This returns an ApiResponse object which contains the response data, status code
try
{
// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
apiInstance.TestEndpointParametersWithHttpInfo(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback);
apiInstance.TestEndpointParametersWithHttpInfo(number, varDouble, patternWithoutDelimiter, varByte, integer, int32, int64, varFloat, varString, binary, date, dateTime, password, callback);
}
catch (ApiException e)
{
Expand All @@ -889,14 +889,14 @@ catch (ApiException e)
| Name | Type | Description | Notes |
|------|------|-------------|-------|
| **number** | **decimal** | None | |
| **_double** | **double** | None | |
| **varDouble** | **double** | None | |
| **patternWithoutDelimiter** | **string** | None | |
| **_byte** | **byte[]** | None | |
| **varByte** | **byte[]** | None | |
| **integer** | **int?** | None | [optional] |
| **int32** | **int?** | None | [optional] |
| **int64** | **long?** | None | [optional] |
| **_float** | **float?** | None | [optional] |
| **_string** | **string** | None | [optional] |
| **varFloat** | **float?** | None | [optional] |
| **varString** | **string** | None | [optional] |
| **binary** | **System.IO.Stream****System.IO.Stream** | None | [optional] |
| **date** | **DateTime?** | None | [optional] |
| **dateTime** | **DateTime?** | None | [optional] [default to &quot;2010-02-01T10:20:10.111110+01:00&quot;] |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**String** | [**Foo**](Foo.md) | | [optional]
**VarString** | [**Foo**](Foo.md) | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ Name | Type | Description | Notes
**Int64** | **long** | | [optional]
**UnsignedLong** | **ulong** | | [optional]
**Number** | **decimal** | |
**Float** | **float** | | [optional]
**Double** | **double** | | [optional]
**Decimal** | **decimal** | | [optional]
**String** | **string** | | [optional]
**Byte** | **byte[]** | |
**VarFloat** | **float** | | [optional]
**VarDouble** | **double** | | [optional]
**VarDecimal** | **decimal** | | [optional]
**VarString** | **string** | | [optional]
**VarByte** | **byte[]** | |
**Binary** | **System.IO.Stream** | | [optional]
**Date** | **DateTime** | |
**DateTime** | **DateTime** | | [optional]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**_123List** | **string** | | [optional]
**var123List** | **string** | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Model for testing model name starting with number
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **int** | | [optional]
**Class** | **string** | | [optional]
**VarClass** | **string** | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**_Client** | **string** | | [optional]
**varClient** | **string** | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Model for testing model name same as property name

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**_Name** | **int** | |
**VarName** | **int** | |
**SnakeCase** | **int** | | [optional] [readonly]
**Property** | **string** | | [optional]
**_123Number** | **int** | | [optional] [readonly]
**var123Number** | **int** | | [optional] [readonly]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Model for testing reserved words

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**_Return** | **int** | | [optional]
**VarReturn** | **int** | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**SpecialPropertyName** | **long** | | [optional]
**_SpecialModelName** | **string** | | [optional]
**VarSpecialModelName** | **string** | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Loading
Loading